constexpr 函数获取常量字符*

constexpr function taking const char*

本文关键字:字符 常量 获取 函数 constexpr      更新时间:2023-10-16

我使用 MSVC v141 和/std:c++17编译。

constexpr const char* test(const char* foo) {
return foo + 1;
}
constexpr const char* bc = test("abc");

编译得很好,而

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

失败,并显示:

错误 C2131:表达式的计算结果未达到常量

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

注意:请参阅"FOO"的用法

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

对我来说似乎是预期的行为。用constexpr声明的函数意味着它可以在编译时计算,但不是必需的。因此,您的函数在运行时计算时也应该有效。这是问题线

constexpr auto bar = foo;

因为它尝试从非constexpr对象创建constexpr对象。