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++中这样做.
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)
| 归档时间: |
|
| 查看次数: |
565 次 |
| 最近记录: |