gpt4 book ai didi

c++ - 使用 C++11 在编译时以编程方式查找字节序

转载 作者:IT老高 更新时间:2023-10-28 23:02:26 25 4
gpt4 key购买 nike

我在 SO 中提到了很多关于这个主题的问题,但到目前为止找不到任何解决方案。这里提到了一种自然的解决方案:Determining endianness at compile time .
但是,评论中提到的相关问题和相同的答案。

经过一些修改,我可以使用 g++ 和 clang++ (-std=c++11) 编译类似的解决方案,而不会发出任何警告。

static_assert(sizeof(char) == 1, "sizeof(char) != 1");
union U1
{
int i;
char c[sizeof(int)];
};
union U2
{
char c[sizeof(int)];
int i;
};

constexpr U1 u1 = {1};
constexpr U2 u2 = {{1}};
constexpr bool IsLittleEndian ()
{
return u1.i == u2.c[0]; // ignore different type comparison
}

static_assert(IsLittleEndian(), "The machine is BIG endian");

Demo .

这可以被认为是确定字节序的确定性方法还是错过了类型双关或其他什么?

最佳答案

从 C++20 开始,您可以使用 std::endian 来自 <type_traits>标题:

#include <type_traits>

int main()
{
static_assert(std::endian::native==std::endian::big,
"Not a big endian platform!");
}

See it live

关于c++ - 使用 C++11 在编译时以编程方式查找字节序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39763611/

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