昨天笔试遇到了关于c++中关于const与const_cast的题目,大概如下:intmain(intargc,char*argv[]){constinta=10;int*p=const_cast(&a;);*p=1;printf("%d %d\n", a,*p);return0;}求上述程序的输出结果,正确答案是:10 1分析如下:首先可以确定是p和&a的地址是指向同一片内存区域的,理论上来说最后的输出结果应该是1 1但是为什么会输出a的值为10呢? 猜测应该是const关键字的问题,可能编译器看到a为const型变量,所以在编译期就将所有的a直接替换为10了,这个是编译器做的一个优化,下面简单的验证下:直接使用下面的命令来看下编译后的汇编代码,关键部分的汇编如下:movl%edi,-20(%rbp)movq%rsi,-32(%rbp)movl $10,-12(%rbp)leaq-12(%rbp),%rax
movq%rax,-8(%rbp)movq-8(%rbp),%rax
movl $1,(%rax)movq-8(%r
...
继续阅读
(21)