Ank*_*kur 0 c c++ optimization const
请考虑以下代码
#include <stdio.h>
#include <string.h>
main()
{
const int a = 2;
long p = (long)&a;
int *c = (int *)p;
*c =3;
printf("%d", a);
}
Run Code Online (Sandbox Code Playgroud)
此代码可以将值更改为C中的a,但不能更改为C++中的值.我知道C++正在应用优化并替换awith的实例2.那么这是C++中的错误修复还是由于优化而偶然修复的错误?
const无论是直接还是间接修改值,都是未定义的行为.这可能在C中编译,甚至可能在您的机器上运行没有问题,但它仍然是未定义的行为.
C和C++之间的区别在于:with const int a = 2,C++将其a视为常量表达式,例如,您可以将其a用作数组维度:
int n[a]; //fine in C++
Run Code Online (Sandbox Code Playgroud)
但在C中,a不是一个常量表达式,使用相同的代码:
int n[a]; //VLA in C99
Run Code Online (Sandbox Code Playgroud)
这里n不是固定大小的数组,而是可变长度数组.