覆盖静态Const变量

时间:2013-08-26 01:30:56

标签: static const memcpy

我编写了一个小方法,可以让我轻松覆盖静态常量变量的值。

以下是我想要更改的变量:

static const unsigned int myInt;

以下是我尝试使用的方法:

template<typename T>
void MyClass::SetConstantVariableValue(void* destination, T& value)
{
    memcpy(destination, (const void*)&value, sizeof(value));
}

以下是用于调用该方法的语句:

int a = 5;
this->SetConstantVariableValue((void*)&myInt, a);

我的问题是,如果 myInt 只是静态而不是常量,它就能完美运行。一旦我将其定义为常量, memcpy 就会因访问冲突而崩溃。

Unhandled exception at 0x596EEB90 (msvcr110d.dll)
0xC0000005: Access violation writing location 0x00AC16B8.

据我所知, memcpy 忽略了一个变量可能是常量的事实,因为它是在运行时执行的,并且不知道目标或源的数据类型是什么。如果这是正确的,那么 static const 的组合就是造成崩溃的原因。我无法找到任何解释为什么这可能导致 memcpy 崩溃。谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

任何修改声明为const的变量的尝试都是未定义的行为。在这种情况下,编译器已选择将const变量存储在只读存储器中。