談論一個函數參數,例如:第二個const在「const int const&someval」中做什麼?
void doSomething(const int const &someVal);
據我瞭解,拳頭常量表示該值將不會被函數改變,並且&表示該值應該傳遞參考。但是第二個'const'是做什麼的?
談論一個函數參數,例如:第二個const在「const int const&someval」中做什麼?
void doSomething(const int const &someVal);
據我瞭解,拳頭常量表示該值將不會被函數改變,並且&表示該值應該傳遞參考。但是第二個'const'是做什麼的?
根據C++標準(7.1.6.1的CV-限定符)
1有兩個cv修飾符,常量和揮發性。 每個cv限定符 在cvqualifier seq中應至多出現一次。如果cv限定符 出現在decl-specifier-seq中,則 聲明的init聲明符列表不應爲空。 [注意:3.9.3和8.3.5描述瞭如何使用 cv-qualifiers影響對象和函數類型。 - 注意] 冗餘cv資格被忽略。 [注:例如,這些可以通過typedefs.,注完介紹]
所以這個聲明
void doSomething(const int const &someVal);
有被簡單地忽略冗餘const修飾。
如果someVal
將被聲明爲對const指針的引用,則第二個const限定符將有意義。例如,
void doSomething(const int * const &someVal);
它不僅被忽略。 'const int const'由7.1.6 [dcl.type]/p2不合格,第一個要點:「'const'可以與任何類型說明符組合_except本身_」。 (強調增加)。 – 2014-10-03 21:16:30
這兩個應該工作:
void doSomething(const int &someVal);
void doSomething(int const &someVal);
使用第二常量不添加任何功能和額外的一個應該被刪除。儘管爲了清晰起見,將常量保留在左邊是一個很好的習慣,因爲它更好。
它刺激,混淆,並導致[編譯器診斷](http://ideone.com/ZYakRQ)。 – 2014-10-03 18:16:13
使程序不合格嗎? – 0x499602D2 2014-10-03 18:16:15
它握着蠟燭。 – jrok 2014-10-03 18:17:22