聲明符。是的,宣言者。他們是很多編碼公約辯論的來源。這是一個很好的爭論話題 - C++不會規定哪一個比另一個更好(它不關心!)。因此,我們可以寫這些,而不必擔心有人會取笑你:可變參數模板中的聲明符修飾符位置
int x;
int& a = x;
int &b = x;
int* c = &x;
int *d = &x;
在語法方面,b
和d
比其他「更有效」。我們被要求在名稱前加上說明修飾語:
int m, *n; // m is an int; n is a pointer to int
但是這個潮流似乎轉而支持一個。用C++ 11的可變參數模板,說明符的位置似乎僅限於其中改性劑是靠近基體類型形式:
template<typename... Ts>
void VariadicFuncRef(const Ts&... args) { }
^
template<typename... Ts>
void VariadicFuncPtr(Ts*... args) { }
^
它是寫這些形式的錯誤:
template<typename... Ts>
void VariadicFuncRef(const Ts... &args) { }
template<typename... Ts>
void VariadicFuncPtr(Ts... *args) { }
有關具體示例,請點擊here。
所以,我的問題是這樣的: 爲什麼我們只限於這種(合法)形式,不能使用其他?
任何想法傢伙?
其他1:我也對這個「規則」爲什麼是「強制執行」的設計決定感興趣。
+1。順便說一句,好問題。 – Nawaz
@Nawaz我花了幾分鐘時間試圖用錯誤的語法編譯代碼。獲得的經驗:不要使用您不熟悉的功能。 –
這將恢復你的世界:這三個......也是宣言者的一部分! –