我来自javascript/php/python,可能我错过了什么,这里是代码:
const int a = 50;
const int c = 100;
const int d = 100;
int endX = c + a;
int endY = d;
int startX, startY, b;
Run Code Online (Sandbox Code Playgroud)
我明白了
ex1.4.c:6:错误:初始化元素不是常量
ex1.4.c:7:错误:初始化元素不是常量
有人有解释吗?
我搜索了互联网和StackOverflow关于const_cast <>及其引起的混乱,我找到了有用的东西,但是我还有一个问题.
考虑到这段代码,
#include <iostream>
using namespace std;
int main(void)
{
const int a = 1;
int *p = const_cast<int*>(&a);
*p = 2;
cout << "value a="<< a << endl;
cout << "value *p=" <<*p << endl;
cout << "address a=" <<&a << endl;
cout << "address p=" <<p << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
值a = 1
值*p = 2
地址a = 0x69fef8
地址p = 0x69fef8
我发现这样的代码可能导致未定义的行为.(例如,编译器可能会将所有a's 替换为's以1进行优化,因此强制转换没有意义)
我也发现了这句话:
如果抛弃已显式声明为const的对象的常量,并尝试修改它,则结果是未定义的.
但是,如果丢弃未明确声明为const的对象的常量,则可以安全地修改它.
还有这个:
请注意,C++提供
const_cast了删除或添加常量的变量.但是,在删除constness时,它应该用于从引用/指针中删除constness,以指向原本不是常量的东西. …