【发布时间】:2016-10-18 09:28:40
【问题描述】:
我想创建一个返回系统字节序的 constexpr 函数,如下所示:
constexpr bool IsBigEndian()
{
constexpr int32_t one = 1;
return (reinterpret_cast<const int8_t&>(one) == 0);
}
现在,由于函数将在编译时而不是在实际的目标机器上执行,C++ 规范提供什么保证来确保返回正确的结果?
【问题讨论】:
-
好问题!这曾经是一个问题(其他语言的其他编译器)w.r.t.浮点常量/表达式和交叉编译器(回到有不同浮点格式的时代)。我想知道 C++ 标准答案。
-
很难有任何实际意义。我无法想象两种架构可以执行相同的编译源代码,但字节序不同。
-
@πάντα ῥεῖ:根本不是这个问题。这是关于检测字节序的特定情况。
-
@SergeyA 交叉编译呢?
-
@RichardCritten,我想,不同架构的交叉编译必须在所有意图和目的上尊重这种架构字节序……但我承认这是一个好点。
标签: c++ language-lawyer endianness constant-expression