为什么 const 和非 const 的汇编代码一样,const 的却能保证不被修改呢?

《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的代码如果都正确,那么编译后一定一样。