为什么它不会更改我的代码中的 const 对象?
Why it doesn't change const object in my code?
这是代码
int main()
{
const int i = 2;
const int * pi = &i;
int* j = const_cast<int *> (pi);
*j = 11;
std::cout << *pi << std::endl;
std::cout << i << std::endl;
return 0;
}
结果:
11
2<---为什么?
Ashttp://en.cppreference.com/w/cpp/language/const_cast把它放在:
即使
const_cast
可以从任何指针或引用中删除常量或波动性,使用结果指针或引用写入声明为const
的对象或访问声明为volatile
的对象也会调用未定义的行为。
在这种情况下,您的编译器显然已经优化了
std::cout << i << std::endl;
至
std::cout << 2 << std::endl;
由于i
是const
并且其值在任何有效程序中都不能改变。(碰巧的是,i
的值确实发生了变化,因为程序无效;但您的编译器并不关心这种可能性,这是非常正确的。C++编译器和程序员通常认为优化正确的代码比减轻错误代码的不正确性更重要。)
相关文章:
- 被解释为低级别const的const对象的地址
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- "this"指向的对象是否与 const 对象相同?
- 从 const 对象访问非 const 方法
- 将非 const 对象用于 const 参数
- 如何键入用于const对象的自定义io操纵器
- 哪个 const 与哪个引用将更改参数并创建一个 const 对象?
- 无法在返回中转换 const 对象
- 接受对 const 对象的引用但没有 r 值的函数
- 当我调用 main 中使用 const 对象的 const 函数时,不断出现错误
- 在 const 对象上调用非 const 函数
- 正确的方法通过巨大的const对象的向量
- 如何重载 const 对象的 [],以便值赋值不会导致编译错误
- 相互引用的 Const 对象
- 析构函数是否可以在 const 对象上调用非 const 函数
- decltype 不会推断 const 对象的 const 成员
- 防止const函数被调用非const对象
- constexpr引用非const对象