相关疑难解决方法(0)

C++在默认构造函数中直接初始化字段与初始化列表

我想知道这段代码之间是否有区别:

class Foo{
 private:
    int a = 0;
 public:
    Foo(){}
}
Run Code Online (Sandbox Code Playgroud)

和:

class Foo{
 private:
    int a;
 public:
    Foo(): a(0) {}
}
Run Code Online (Sandbox Code Playgroud)

如果是这样,哪个应该是首选?我知道最好使用初始化列表而不是在构造函数体中赋值,但是初始化列表与在字段声明中直接初始化相比(对于基本类型,至少如此情况)?

另外,下面的情况如下:

class Foo{
 private:
   int a = 0;
 public:
   Foo(){}
   Foo(int i): a(i) {}
}
Run Code Online (Sandbox Code Playgroud)

当调用非默认构造函数时:是"a"初始化两次,首先是0再到"i",还是直接到"i"?

c++

21
推荐指数
3
解决办法
2113
查看次数

标签 统计

c++ ×1