在寻找一种在编译时检查字节顺序的方法后,我提出了以下解决方案:
static const int a{1};
constexpr bool is_big_endian()
{
return *((char*)&(a)) == 1;
}
GCC 仅在需要 constexpr 的某些情况下接受此代码:
int b[is_big_endian() ? 12 : 25]; //works
std::array<int, testendian() ? 12 : 25> c; //fails
对于第二种情况,GCC 说error: accessing value of ‘a’ through a ‘char’ glvalue in a constant expression
. 我在标准中找不到任何禁止此类事情的内容。也许有人可以澄清在哪种情况下GCC是正确的?