C++ 当C++;11初始化变量
我使用CLion作为IDE,它在IDE中报告一个错误 字段z必须初始化 它可以编译和运行。但是如果我改变C++ 当C++;11初始化变量,c++,c++11,clion,C++,C++11,Clion,我使用CLion作为IDE,它在IDE中报告一个错误 字段z必须初始化 它可以编译和运行。但是如果我改变constintz{3}到常数int z=3,IDE中不会报告任何错误。我的问题是,这究竟是我的代码的错误,还是只是IDE中的一个bug?这两种初始化方法之间有什么区别吗?您的IDE是否报告了此错误 #include <iostream> using namespace std; class Test { private: const int x = 3; int
constintz{3}代码>到<代码>常数int z=3代码>,IDE中不会报告任何错误。我的问题是,这究竟是我的代码的错误,还是只是IDE中的一个bug?这两种初始化方法之间有什么区别吗?您的IDE是否报告了此错误
#include <iostream>
using namespace std;
class Test
{
private:
const int x = 3;
int y;
const int z{3};
public:
Test(int);
int gety(){
return y;
}
};
Test::Test(int a){
y=x+4;
}
int main()
{
Test test(5);
std::cout << test.gety() << std::endl;
return 0;
}
#包括
使用名称空间std;
课堂测试
{
私人:
常数int x=3;
int-y;
常数int z{3};
公众:
测试(int);
int gety(){
返回y;
}
};
测试::测试(INTA){
y=x+4;
}
int main()
{
试验(5);
标准::cout
这是否真的是我的代码错误
代码中没有错误,没有问题
或者它只是IDE中的一个bug
无论产生错误消息的是什么,它都是一个bug。IDE在我的怀疑列表中排名靠前,但它可能是IDE传递消息的另一个工具
这两种初始化方法之间有什么区别吗
在此上下文中(默认成员初始值设定项)这两种语法在语义上是等价的。没有区别。你在编译时看到了吗?如果是,你在使用哪个编译器?我在编译时没有看到。代码可以编译并运行。它只在IDE中报告。对于IDE,有几种方法可以修复它,例如删除常量,只需使用int'z{3}即可'或将其更改为'const int z=3'。如果您将上述代码复制并传递到编译器或IDE,您能看到问题吗?这是一个真正的错误还是IDE错误?您的代码是有效的。JetBrains issue tracker for CLion中似乎有许多报告的错误与此相关(或看起来足够类似)(带括号的init问题)。很可能是静态分析中的误报。可能很烦人,但代码应该很好。