gpt4 book ai didi

c++ - 严格的混叠违规

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

下面的程序是否违反了严格的别名规则?

#include <cstdint>

int main()
{
double d = 0.1;

//std::int64_t n = *reinterpret_cast<std::int64_t*>(&d); // aliasing violation

//auto n{*reinterpret_cast<std::int64_t*>(&d)}; // aliasing violation

auto nptr{reinterpret_cast<std::int64_t*>(&d)};
auto& n{*nptr};

++n;
}

VS2015 没有发出警告,clanggcc .

最佳答案

Does the following program violate the strict aliasing rule?

是的,确实如此。您正在使用 std::int64_t* 取消引用 double* (&d)。

违反严格别名规则的行是:

auto& n{*nptr};

在处理该行时,编译器不一定知道您如何设置nptr 的值。它是 double* 的别名这一事实在处理该行时并不明显。

关于c++ - 严格的混叠违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37998089/

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