c++ - 无法使用内存位置更改 const 值

标签 c++ memory-management constants

我正在围绕 C++ 内存分配进行一些测试。

在下面的代码示例中,我想使用内存位置更改常量变量 (= cannotBeChangedDirectly) 的值。

为什么它不起作用?

当我查看我可以看到的内存时,地址的值(两个变量,const 和普通变量都引用了变化,但是当我打印结果时,const 变量仍然有旧结果,为什么?)

考虑以下代码示例:

#include "stdafx.h"
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
    const int       cannotBeChangedDirectly = 10;
    std::cout << "cannotBeChangedDirectly &" << &cannotBeChangedDirectly << " cannotBeChangedDirectly =" << cannotBeChangedDirectly << std::endl;
    int* canBeChanged = const_cast<int*>(&cannotBeChangedDirectly);

    std::cout << "cannotBeChangedDirectly &" << &cannotBeChangedDirectly << " canBeChanged & " << canBeChanged << std::endl;
    std::cout << "cannotBeChangedDirectly =" << cannotBeChangedDirectly << " canBeChanged = " << *canBeChanged << std::endl;

    *canBeChanged = 19;

    std::cout << "cannotBeChangedDirectly &" << &cannotBeChangedDirectly << " canBeChanged & " << canBeChanged << std::endl;
    std::cout << "cannotBeChangedDirectly =" << cannotBeChangedDirectly << " canBeChanged = " << *canBeChanged << std::endl;
}

最佳答案

改变 const 是未定义的行为,因为:
const 不仅仅是编译器不会让你直接改变变量,
但它允许进一步的编译器优化,比如根本不分配变量
并在各处插入值

关于c++ - 无法使用内存位置更改 const 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23948848/

相关文章:

c++ - 正确销毁指向对象的指针

c++ - boost::mpl::vector - 获取类型的基本偏移量

c++ - 在CentOS中编译C遇到错误: undefined reference to

java - 对具有内存限制的大文件进行排序 - 外部排序

ruby-on-rails - PostgreSQL安装报错--无法分配内存

c++ - 为什么 int& r = 0 是非法的,而 const int& r = 0 是合法的?

GCC 可以警告我修改 C99 中 const 结构的字段吗?

c++ - Eigen 库分配矩阵的元素?

c++ - 似乎一切正常,除了添加

c++ - 类型为 "Class* const"的“this”,即使方法不是 const