编译器在constexpr中使用strcmp的差异

时间:2014-07-01 23:39:37

标签: c++ gcc c++11 clang constexpr

以下汇编在海湾合作委员会,但不在Clang:

#include <cstring>

constexpr int test = strcmp("test", "test");

所以我的问题是,GCC如何以不同方式处理strcmp以实现这一目标? strcmp是某种类型的内置函数,还是它的标准库有一个非标准的strcmp定义,包括constexpr?

2 个答案:

答案 0 :(得分:4)

代码在gcc上编译,因为它提供了在编译时评估的built-in version strcmp,假设您将字符串文字传递给函数。

如果您传递-fno-builtin(或-fno-builtin-strcmp)标记,

gcc将reject the code

答案 1 :(得分:3)

禁止禁止作为constexpr的函数。我无法保证strcmpconstexpr。一个好的编译器可能能够有效地对编译时常量字符串执行字符串操作,但这是一个实现细节。