我编写了一个小方法,可以让我轻松覆盖静态常量变量的值。
这是我要更改的变量:
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崩溃。有人知道我在做什么错吗?