tab*_*ces 0 c c++ const constants
这个答案在这个问题介绍了如何通过非关联化的指针,它的地址作品(显然是通过创建一个新的变量)改变一个常数变量.
const int i = 10;
*(int *)&i = 5;
std::cout << &i << "\t" << i << "\n"; // 0x7fff6b325244 10
std::cout << &*(int *)&i << "\t" << *(int *)&i << "\n"; // 0x7fff6b325244 5
Run Code Online (Sandbox Code Playgroud)
随着&*(int *)&i我试图让以前的答案是谈论新的变量的地址.如何找到存储此新变量的位置?
*(int *)&i 显示不同的值,因此必须有一个新变量.
在g ++ 5.4.0,Ubuntu 16.04上编译
更改声明的变量值时的行为const是未定义的.编译器不必做任何有意义的事情.
在这种情况下,编译器在打印const值时不会费心查看内存i,因为它知道任何符合规范的代码都不可能改变该值.打印时i,它会生成此程序集:
mov esi, 10
mov rdi, rax
call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
Run Code Online (Sandbox Code Playgroud)
请注意,它只是10在该呼叫中硬编码.
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |