我想知道,例如,在小端平台上编译的评估是否会在大端目标平台上返回 true。
constexpr bool is_little_endian()
{
int num = 1;
return (1 == *(char *)&num);
}
换句话说,constexpr 是否像在目标上一样求值?
编辑:这个例子不正确,但问题仍然存在。
最佳答案
首先:如果您为给定目标编译代码,那么编译器将为那个目标生成代码。当然,这包括在编译时计算的表达式 - 否则涉及此类表达式的每个交叉编译都会被破坏。
但是,仅仅将一个函数标记为 constexpr
并不能保证它在编译时被计算。特别是,您的示例函数不能(根据标准)在编译时进行评估,因此它与主要问题正交。
如评论中所述,如果不直接查询编译器,您无法在编译时真正找出字节顺序。编译器必须知道(因为它必须生成代码)并且任何合理的编译器都会为您提供一种查询此信息的方法(在编译时)。
关于c++ - 是否在目标平台上评估了 constexpr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53502973/