在学习《深入应用C++代码优化与工程级应用》的第3章的时候,运行代码,发现一点印刷错误和自己在vs2017和mingw中运行的结果不同(运行结果以编译器中的为准)
#include <iostream>
#include <type_traits>
int main()
{
std::cout << std::boolalpha;
std::cout << "is_const:" << std::endl;
std::cout << "int: " << std::is_const<int>::value << std::endl;
std::cout << "const int: " << std::is_const<const int>::value << std::endl;
std::cout << "const int&: " << std::is_const<const int&>::value << std::endl;
std::cout << "cont int* " << std::is_const<const int*>::value << std::endl;
std::cout << "int * const:" << std::is_const<int* const>::value << std::endl;
getchar();
return 0;
}
运行结果:
is_const:
int: false
const int: true
const int&: false
cont int* false
int * const:true
现在对运行结果唯一有疑问的地方就是
std::is_const<const int&>::value
输出是是false,这是为什么呢?
引用的const 限定符仅仅意味着不能通过引用参数修改值。 它仍然可以被其他方法修改。 例如:
#include <iostream>
#include <type_traits>
int main()
{
std::cout << std::boolalpha;
int a = 1;
const int &b = a;
std::cout << b << std::endl; //输出1
a = 2;
std::cout << b << std::endl; //输出2
getchar();
return 0;
}
因此,你不能假定 const 引用的值实际上是常量。