正在打破严格别名规则的演员

cod*_*ave 6 c++ strict-aliasing reinterpret-cast type-punning

我有一个函数,它接受一个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
}
Run Code Online (Sandbox Code Playgroud)

这会产生一个警告,说它违反了严格别名规则.有没有工作?

谢谢

编辑:我为不清楚而道歉.代码是一个原子更新,因此绕过库来存储它不是一个选项.我可以下载到汇编但我想在C++中这样做.

dav*_*ave 8

void UpdateVar(unsigned long* var) {
   unsigned int x = static_cast<unsigned int>(*var);
   ExternalLibUpdateVar(&x);
   *var = static_cast<unsigned long>(x);
}
Run Code Online (Sandbox Code Playgroud)