这里是代码:
#include <cstring>
#include <cstdint>
#include <cstddef>
uint64_t uint5korr(const std::byte *p)
{
uint64_t result= 0;
std::memcpy(&result, p, 5);
return result;
}
这里的clang将result
优化为寄存器,而gcc没有。我怀疑这可能与我取变量地址有关,因为不能取寄存器的地址。
这是gcc中缺少的一种优化,还是clang在某种程度上违反了标准?
std::uint64_t
是一个平凡可复制的类型,但是你在这里并没有复制整个对象表示... - Michael Kenzel