看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《rosemary0401 (rosemary)》之銘言: : ===== Q1 ===== : The -inl.h Files: : ...However, implementation code properly belongs in .cc files, and we do not : like to have much actual code in .h files unless there is a readability or : performance advantage... : 有聽過類似的建議,不要再header file裡面放太多實作, : 實作盡量放在.c file裡,但是不太知道這樣做的好處是什麼??? 除了 inline function 與 template 其它的實作都必需放 .c 不然會 link error : 谷歌的style guide又提到"unless there is a readability or performance advantage" : 但在甚麼樣的情況下,把實作的code搬到header file會提升performance呢??? inline 會節省呼叫 function 的時間 但是也會明顯增加程式的大小 程式大小增加意味載入時間增加以及 cache miss 增加 所以最終結果來看 inline 不一定會加快速度 : ===== Q2 ===== : Casting: : Use C++ casts like static_cast<>(). Do not use other cast formats like : int y = (int)x; or int y = int(x);. : Pros: : The problem with C casts is the ambiguity of the operation; sometimes you are : doing a conversion (e.g., (int)3.5) and sometimes you are doing a cast (e.g., : (int)"hello"); C++ casts avoid this. Additionally C++ casts are more visible : when searching for them. : 看不太懂C style的轉型不好的點在哪?? : 意思是說C style的轉型太暴力, : 連不合乎邏輯的轉型都可以轉的過嗎??? (比方說: (int)"hello") 原文並沒有提到暴力兩個字吧... 而是 ambiguity 模稜兩可 C++ 因為有 OOP 繼承、多型的概念 因此它加入了四種不同的轉型運算: static_cast, dynamic_cast, const_cast, reinterpret_cast 這四種不同的轉型運算各自有不同的意義 轉出來的結果也不一樣 另一方面 C++ 為了保持與 C 的相容性而保留了 C style cast 糟糕的是,在不同的場合下,C style cast 有不同的意義 許多情況下它等於 static_cast,但有時候它又是 reinterpret_cast 此外它也可以當 const_cast 來用,卻又沒有 const_cast 對型別的保護 之所以不要用 C style cast,是為了讓程式碼表達得更清楚 程式碼的目的愈明確,不只讀碼的人易懂 compiler 也更容易幫你找出潛在問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.39.238.241
KanoLoa:推 11/19 00:55
legendmtg:explicit is better than implicit 11/19 01:09
BlazarArc:推 11/19 02:30
uranusjr:二樓那是 Python 原則吧XD 11/19 13:53
legendmtg:好習慣不分語言啊XDD 11/20 00:21