C++ std::is_const的用法

在学习《深入应用C++代码优化与工程级应用》的第3章的时候,运行代码,发现一点印刷错误和自己在vs2017和mingw中运行的结果不同(运行结果以编译器中的为准)

#include 
#include 

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 
#include 

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 引用的值实际上是常量。

参考:
c++ - C++ 为什么 std::is_const :: 值计算为 false?

你可能感兴趣的:(C++11/14/17)