constexpr似乎不起作用

时间:2015-03-02 03:12:08

标签: c++ c++11 constexpr

我正在使用Visual Studio 2013 + CTP。

我定义了以下功能:

constexpr DWORD const_getHash(const char *str, DWORD curHash = 0) {
    return !*str ? curHash : const_getHash(str + 1, 
        (curHash >> 13 | curHash << (32 - 13)) + (*str >= 'a' ? *str - 32 : *str));
}

我这样使用:

DWORD hash = const_getHash("ok");

编译器不会发出任何警告,但通过查看“反汇编”,我可以看出const_getHash()是在运行时执行的。

怎么了?

编辑:如果我强制在编译时使用

执行该函数
constexpr DWORD hash = const_getHash("ok");

编译器说

Error   1   error C2127: 'hash': illegal initialization of 'constexpr' entity with a non-constant expression

1 个答案:

答案 0 :(得分:0)

constexpr不会强制在编译时执行该函数。它只是告诉编译器 函数可以在编译时执行 ,如果需要

  当

constexpr函数的所有参数都是常量表达式并且结果也用在常量表达式中时,它将在编译时进行评估。

(引用接受的答案here。)