《C++ Primer》第五版,中文版。145 页。
const int i = 42;//int i = 42;
cout << i << endl;
const int *p = &i;
*const_cast<int *>(p) = 0;
cout << i << endl;
const int i = 42; 与 int i = 42;的代码好像是一样的,我没仔细看。
const应该是c语言在编译成汇编代码前预处理用的关键字,g++/gcc之类的工具检查到有const关键词修饰的变量被修改了则报错
const 只是编译器协助你排查问题的东西,他并不实质上在汇编上影响你的行为或代码。就好像断言的存在一样。
const和汇编没有关系,它是c++编译器用来判断你对数据操作的是不是合法的。过了c++编译器,这些限定符就没有用了
const的限制只在编译之前,用来判断数据的操作方式,定义了怎样的类型的同时定义了对它的操作方式和存储方式,汇编之后已经操作过了,限定并没有用。
const只是为了告诉编译器,这个变量不能被更改,也就是说const只是一个减少程序员出错的机制,因为程序一旦大时,
很可能会有莫名其妙的操作导致各种bug,因此引入const,这么说,假如所有的程序员都是完美的不会出错,能清晰的知道所有函数怎么调用,
那么不需要 const 关键字了。const本身对程序不会有任何改变,所以有无const的代码如果都正确,那么编译后一定一样。