c++ - 是否在目标平台上评估了 constexpr?

标签 c++ constexpr

我想知道,例如,在小端平台上编译的评估是否会在大端目标平台上返回 true。

constexpr bool is_little_endian()
{
    int num = 1;
    return (1 == *(char *)&num);
}

换句话说,constexpr 是否像在目标上一样求值?

编辑:这个例子不正确,但问题仍然存在。

最佳答案

首先:如果您为给定目标编译代码,那么编译器将为那个目标生成代码。当然,这包括在编译时计算的表达式 - 否则涉及此类表达式的每个交叉编译都会被破坏。

但是,仅仅将一个函数标记为 constexpr 并不能保证它在编译时被计算。特别是,您的示例函数不能(根据标准)在编译时进行评估,因此它与主要问题正交。

如评论中所述,如果不直接查询编译器,您无法在编译时真正找出字节顺序。编译器必须知道(因为它必须生成代码)并且任何合理的编译器都会为您提供一种查询此信息的方法(在编译时)。

关于c++ - 是否在目标平台上评估了 constexpr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53502973/

相关文章:

c++ - 更改标题栏图标时如何正确使用 LoadIcon 和 MAKEINTRESOURCE?

c++ - 使用概念启用类模板的成员函数

c++ - C++ 中的#include 问题

c++ - 通过引用调用 `constexpr` 成员函数 - clang vs gcc

c++ - 用 const char*const 解释 constexpr

c++ - 如果 constexpr 格式正确,这是在内部使用 static_assert 吗?

c++ - 在 C++ 中初始化静态字符串成员

c++ - 如何在 CodeBlocks 中运行 C++ 程序

c++ - 用户定义的非类型参数解决方法

c++ - 如果函数在类范围内声明,则 constexpr 不起作用