参数声明中的"const T const"

"const T const" in parameter declaration

本文关键字:const 声明 参数      更新时间:2023-10-16

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

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

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

7.1.6.1 简历限定词 [dcl.type.cv]

1 有两个 cv 限定符,常量和易失性。每个 cv 限定符在 cv-seq 中最多出现一次。

可以在 C++ 声明中引入冗余const,但这需要将以前的const"隐藏"在 typedef-name 中。在这种形式下,减退将是合法的,多余的限定词将被忽略。

const修饰

符之一是多余的;在这里有两个只不过是一个(如果这至少没有发出警告,我会感到惊讶)。

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