C++ std::is_const的用法

在学习《深入应用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 引用的值实际上是常量。

参考:
c++ - C++ 为什么 std::is_const <const int&>:: 值计算为 false?

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值