Adr*_*ica 6 c++ visual-c++ constexpr
注意:Stack Overflow 上有很多标题看起来非常相似的问题,但恕我直言,我发现没有一个问题实际上是重复的。
我多年来一直在我的项目中使用如下代码,没有出现任何问题。但是,自从最近更新 Visual Studio 2019(16.7.2 - 尽管可能是16.7.1)以来,MSVC编译器已开始生成所示的错误(我将编译“标准”设置为 C++17 )。
#include <iostream>
class Foo {
public:
Foo() { }
static constexpr char Letters[6][10] = { "Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot" };
};
int main()
{
Foo f;
for (int i = 0; i < 6; ++i) std::cout << f.Letters[i] << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误(在行的左大括号处constexpr
):
错误 C2131:表达式未计算为常量
消息:失败是由读取未初始化的符号引起的
clang-cl编译器继续接受代码,没有任何警告。
我对这个问题有一个相当“微不足道”的修复,如下所示:
class Foo {
public:
Foo() { }
inline static const char Letters[6][10] = { "Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot" };
};
Run Code Online (Sandbox Code Playgroud)
然而,我对错误报告很感兴趣。是否有我遗漏的东西(并且已经遗漏了约 5 年),或者这是最新版本的 MSVC 中的错误?如果是前者,我的错误或无效假设是什么?
您的代码是有效的(并被 GCC 和 Clang 接受),这确实是 MSVC v 19.27 及更高版本中的错误。在线演示: https: //gcc.godbolt.org/z/rdnn9M8j3
该错误于 2021 年 1 月 26 日报告: https://developercommunity.visualstudio.com/t/Compile-error--when-declare-static-const/1320740 ,目前正在调查中。