作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] 谷歌的C++ Style Guide
時間Sun Nov 18 23:31:14 2012
※ 引述《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