在C ++中更改静态const int的值

问题描述 投票:1回答:1

我需要更改static const int成员的值。我知道这有点奇怪,但是我需要它来克服我使用的框架所赋予的限制!

我已经尝试过,但是没有用,它会显示一条错误消息:“未定义对MyClass :: staticConstMember的引用”:

class MyClass
{
static const int staticConstMember = 10;
};
int main()
{
int* toChageValue = const_cast<int*>(&MyClass::staticConstMember);
 toChangeValue = 5;
std::cout<<MyClass::staticConstMember<<std::endl; // here I need to print 5
Return 0;
};
c++ static const
1个回答
1
投票
编译器知道这一点并利用了这些知识。

您不能希望可靠地做到这一点。即使您以某种方式设法说服内存中的位实际发生了更改(使用UB,例如您尝试的强制类型转换),也无法确定编译器会从该内存中发出加载指令,而不是缓存加载结果甚至进行硬编码const对象在编译时具有的值。

[更不用说这样的对象(static const int)可以驻留在您的程序没有写访问权的一部分内存中的事实。执行您尝试的这种不安全的转换会导致程序出现访问冲突而崩溃。

您将不得不找到实现您实际目标的另一种方法。

© www.soinside.com 2019 - 2024. All rights reserved.