【发布时间】:2011-04-15 09:32:11
【问题描述】:
我有一个采用 unsigned long* 的函数,需要将其传递给采用 unsigned int* 的外部库,并且在此平台上 unsigned int/long 的大小相同。
void UpdateVar(unsigned long* var) {
// this function will change the value at the address of var
ExternalLibAtomicUpdateVar((unsigned int*)var); // lib atomically updates variable
}
这会生成一个警告,指出它违反了严格的别名规则。有什么解决办法吗?
谢谢
编辑:我很抱歉不清楚。该代码是一个原子更新,所以绕过库来存储它不是一种选择。我可以下到汇编,但我想在 C++ 中执行此操作。
【问题讨论】:
-
只适用于单个对象或长/整数数组?
-
这是对单个 32 位内存的原子存储。
标签: c++ reinterpret-cast strict-aliasing type-punning