谈论一个函数参数,例如:第二个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