参数声明中的“const T const”

时间:2017-01-26 21:33:04

标签: c++

我前几天遇到过这段代码:

template< class T > 
T findMax(const T const * data, 
        const size_t const numItems) { 
// Obtain the minimum value for type T 
T largest = 
    std::numeric_limits< T >::min(); 
for(unsigned int i=0; i<numItems; ++i) 
if (data[i] > largest) 
largest = data[i]; 
return largest; 
}

为什么每个参数都包含两个const s?

2 个答案:

答案 0 :(得分:8)

没有任何有意义的理由。此外,const限定符的这种显式重复在C ++中是非法的。代码格式不正确。

  

7.1.6.1 cv-qualifiers [dcl.type.cv]

     

1 有两个cv限定符,const和volatile。每个cv-qualifier在cvqualifier-seq中最多只出现一次。

可以在C ++声明中引入冗余的const,但这需要在typedef-name中“隐藏”以前的const。在该形式中,声明将是合法的,并且将忽略冗余限定符。

答案 1 :(得分:2)

其中一个const修饰符是多余的;这里有两个人自己做的不过是一个人(如果这至少没有发出警告,我会感到惊讶)。

作者可能的意思是const T* const,它是指向T的常量实例的常量指针。