constexpr 函数获取常量字符*
constexpr function taking const char*
我使用 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
对象。
相关文章:
- 多字符常量警告
- const_cast<字符 *>(字符* 常量) 不是左值?
- 常量字符数组模板与字符常量* 函数重载
- 如何检查字符常量是否符合ASCII
- 从字符串数组转换为字符* 常量
- 字符常量或字符串常量
- 字符常量数组为空,即使已为其赋值 [C++]
- 如何创建 ' 字符常量
- 如何编写完全可移植的 4 字节字符常量的编译时初始化
- 我得到以下错误:[警告]多字符字符常量
- C++错误:警告:多字符字符常量/a用于用法
- 字符常量和函数名称的 sizeof() 背后的逻辑
- 如何在 C 中将多字符常量转换为整数
- C++ wifstream:不兼容的字符常量*,wchar_t康斯特*类型
- 不允许从"常量无符号字符*常量*"到"常量字符*常量*"static_cast
- 修改字符 *常量字符串
- 为什么字符常量/文字不能为空?
- C++字符 * 常量与字符 *,为什么有时一个有时另一个
- 警告多字符字符常量 [-Wmultichar]
- 开关语句多字符常量