为什么std :: is_const <const int&=“”> :: value计算为false?</const>

时间:2014-06-04 05:31:20

标签: c++ c++11 typetraits

这是问题How to check if object is const or not?的衍生物。

我很惊讶地看到以下程序

#include <iostream>
#include <type_traits>

int main() 
{
   std::cout << std::boolalpha;
   std::cout << std::is_const<const int&>::value << "\n";
}

产生了这个输出

false

在什么情况下将const int&视为非const类型是有意义的?

2 个答案:

答案 0 :(得分:13)

也许用这个例子来理解它会更容易

std::cout << std::is_const<int const *>::value << "\n";  // pointer to const int
std::cout << std::is_const<int * const>::value << "\n";  // const pointer to int

输出:

false
true

第一种类型是指向const int的指针,而在第二种类型中int *本身是const。因此,它导致true而前者为false。同样,您对const int的引用。如果int& const有效,则会生成true

答案 1 :(得分:0)

参考上的const限定符仅表示无法通过参考修改值。它仍然可以通过其他方式进行修改。例如:

int a = 1;
const int &b = a;

std::cout << b << std::endl;  // Prints 1

a = 2;

std::cout << b << std::endl;  // Prints 2

因此,您不能假设const引用的值实际上是常数。