constexpr 函数采用 const char*

Seb*_*ann 0 c++ constexpr

我使用 MSVC v141 和/std:c++17.

constexpr const char* test(const char* foo) {
    return foo + 1;
}

constexpr const char* bc = test("abc");
Run Code Online (Sandbox Code Playgroud)

编译得很好,而

constexpr const char* test(const char* foo) {
    constexpr auto bar = foo;
    return bar + 1;
}

constexpr const char* bc = test("abc");
Run Code Online (Sandbox Code Playgroud)

失败:

错误 C2131:表达式未计算为常量

失败是由在其生命周期之外读取变量引起的

注意:参见'foo'的用法

这是正确的行为还是 MSVC 中的错误?

pat*_*gan 5

对我来说似乎是预期的行为。一个用 with 声明的函数constexpr意味着它可以在编译时被评估,但不是必须的。所以你的函数在运行时评估时也应该是有效的。这是问题线

constexpr auto bar = foo;
Run Code Online (Sandbox Code Playgroud)

因为它试图constexpr从一个非对象创建一个对象constexpr