C++ std::is_constの使い方

7833 ワード

『C++コード最適化とエンジニアリングレベル応用を深く応用する』の第3章を学習したとき、コードを実行し、印刷エラーがvs 2017と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として計算されますか?