什么是第二个const在“const int const& someval”中做什么?

时间:2014-10-03 18:14:22

标签: c++

谈论一个函数参数,例如:

void doSomething(const int const &someVal);

据我所知,第一个const表示该值不会被该函数改变,并且&表示该值应通过引用传递。但第二个'const'是做什么的呢?

2 个答案:

答案 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保持在左侧是一个很好的做法,因为它更加突出。