以下汇编在海湾合作委员会,但不在Clang:
#include <cstring>
constexpr int test = strcmp("test", "test");
所以我的问题是,GCC如何以不同方式处理strcmp以实现这一目标? strcmp是某种类型的内置函数,还是它的标准库有一个非标准的strcmp定义,包括constexpr?
答案 0 :(得分:4)
代码在gcc上编译,因为它提供了在编译时评估的built-in version strcmp
,假设您将字符串文字传递给函数。
-fno-builtin
(或-fno-builtin-strcmp
)标记,gcc将reject the code。
答案 1 :(得分:3)
禁止禁止作为constexpr
的函数。我无法保证strcmp
为constexpr
。一个好的编译器可能能够有效地对编译时常量字符串执行字符串操作,但这是一个实现细节。