C++11变量初始化时,使用{}和=有什么区别?

3
我使用CLion作为IDE,它在IDE中报告了一个错误:

字段z必须被初始化

虽然代码可以编译和运行。但是如果我将const int z{3};更改为const int z=3;,那么在IDE中就不会报错。我的问题是:这是否确实是我的代码中的错误,还是只是IDE中的一个错误?这两种初始化方法之间有什么区别?你的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;
}

你在编译时看到这个了吗?如果是,你使用的是哪个编译器? - Vaughn Cato
1
我在编译时没有看到这个问题。代码可以编译和运行。只有在IDE中才会报告。对于IDE,有几种方法可以解决它,例如删除const,简单地使用int 'z {3}'或将其更改为'const int z = 3'。如果您将上述代码复制并粘贴到您的编译器或IDE中,您能看到这个问题吗?这是一个真正的错误还是IDE的错误? - drbombe
您的代码是有效的。 - Vaughn Cato
在JetBrains的CLion问题跟踪器中似乎有一些报告的错误与此有关(或看起来足够相似)(使用大括号初始化的问题)。很可能是静态分析中的误报。也许有点烦人,但代码应该没问题。 - jpw
1个回答

6

是否是我的代码出错了?

代码没有错误,一切正常。

还是说这是IDE的一个bug?

这是由生成错误消息的工具引起的bug。IDE是我怀疑的主要对象之一,但也可能是IDE转发的另一个工具的消息。

这两种初始化方法有什么不同吗?

在这个语境中(默认成员初始化器),这两种语法在语义上是等价的。没有区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接