gpt4 book ai didi

c++ - 违反严格别名规则的类型转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:37 25 4
gpt4 key购买 nike

我有一个函数需要一个 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++ 中执行此操作。

最佳答案

void UpdateVar(unsigned long* var) {
unsigned int x = static_cast<unsigned int>(*var);
ExternalLibUpdateVar(&x);
*var = static_cast<unsigned long>(x);
}

关于c++ - 违反严格别名规则的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3763828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com