这是问题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类型是有意义的?
答案 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
引用的值实际上是常数。