C和C++中未定义,未指定和实现定义的行为有什么区别?
c c++ undefined-behavior unspecified-behavior implementation-defined-behavior
#include <stdio.h>
int main()
{
const int a = 12;
int *p;
p = &a;
*p = 70;
}
Run Code Online (Sandbox Code Playgroud)
它会起作用吗?
这个答案在这个问题介绍了如何通过非关联化的指针,它的地址作品(显然是通过创建一个新的变量)改变一个常数变量.
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上编译