我前几天遇到过这段代码:
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?
答案 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
的常量实例的常量指针。