谈论一个函数参数,例如:
void doSomething(const int const &someVal);
据我所知,第一个const表示该值不会被该函数改变,并且&表示该值应通过引用传递。但第二个'const'是做什么的呢?
答案 0 :(得分:2)
根据C ++标准(7.1.6.1 cv-qualifiers)
1有两个cv限定符,const和volatile。 每个cv-qualifier 在cvqualifier- seq中最多出现一次。如果是cv-qualifier 出现在decl-specifier-seq中,init-declarator-list 声明不得为空。 [注:3.9.3和8.3.5描述了如何 cv-qualifiers影响对象和函数类型。 - 尾注] 忽略冗余cv资格。 [注意:例如,这些可以通过typedefs.-end note引入]
所以这个宣言
void doSomething(const int const &someVal);
有一个简单忽略的冗余const限定符。
如果将someVal
声明为对const指针的引用,则第二个const限定符将有意义。例如
void doSomething(const int * const &someVal);
答案 1 :(得分:0)
这两项都应该有效:
void doSomething(const int &someVal);
void doSomething(int const &someVal);
使用第二个const不会添加任何功能,应删除额外的功能。为了清晰起见,将const保持在左侧是一个很好的做法,因为它更加突出。