C++ 默认构造函数是否将变量初始化为零?

C++ 默认构造函数是否将变量初始化为零?,c++,constructor,c++14,C++,Constructor,C++14,我正在将一个类更新为C++14,并试图找出在构造时将所有实例变量初始化为零的最简单方法。以下是我目前掌握的情况: class MyClass { public: int var; float* ptr; double array[3]; MyStruct data; unique_ptr<MyStruct> smart_ptr; MyClass() = default; ~MyClass() = default; } 。。。

我正在将一个类更新为C++14,并试图找出在构造时将所有实例变量初始化为零的最简单方法。以下是我目前掌握的情况:

class MyClass {
public:
    int var;
    float* ptr;
    double array[3];
    MyStruct data;
    unique_ptr<MyStruct> smart_ptr;

    MyClass() = default;
    ~MyClass() = default;
}
。。。还是需要初始化每个变量?(我在VisualStudio中尝试过这两种方法,但我不确定这是否是幸运的。)

我正在实例化没有括号的类:
MyClass obj

将构造函数设置为默认值等同于执行以下操作:

MyClass() : var{}, ptr{}, array{}, data{}, smart_ptr{} {}
MyClass() : var{}, ptr{}, array{}, data{}, smart_ptr{} {}
不,不是


线路

MyClass() = default;
更类似于但不完全等同于:

 MyClass() {}
在这两种情况下,使用

 MyClass obj;
结果生成一个默认初始化的对象,其成员为默认初始化的

但是,在使用

 MyClass obj{};

就是说,
obj
将使用默认的默认构造函数进行零初始化,而它仍将使用用户提供的默认构造函数进行默认初始化。

要使所有变量在构造时进行零初始化,即使创建者没有请求,一种方法是:

struct MyClassMembers
{
    int var;
    float* ptr;
    double array[3];
    MyStruct data;
    unique_ptr<MyStruct> smart_ptr;
};

struct MyClass : MyClassMembers
{
    MyClass(): MyClassMembers{} {}
};
struct MyClassMembers
{
int-var;
浮动*ptr;
双数组[3];
MyStruct数据;
独特的_ptr智能_ptr;
};
结构MyClass:MyClassMembers
{
MyClass():MyClassMembers{}{}
};

然后
MyClass m
将使用
MyClassMembers{}
初始化成员。

伙计,我本来想给你一个自鸣得意的答案,但现在我不确定。又见哈哈:)我知道,对吧!我真的看到了那篇帖子,但正是这条评论让我感到不确定:。因此,如果您根本没有构造函数,调用带有括号的
MyClass instance()
,则初始化为零:|从逻辑上讲,将构造函数设置为
default
,将默认初始化成员。默认初始化并不总是等同于零初始化。typo:int{}应该是var{}固定的,谢谢!我也很感激你的回答。我认为
MyClass(){}
是用户提供的构造函数,而
MyClass=default,这对吗
是一个默认构造函数,所以在某些情况下它会初始化为零@ChrisNolet“default constructor”是指一个不需要参数就可以调用的构造函数。我指的是默认构造函数。除非其中一个成员有一个非默认的默认构造函数,如R Sahu的answer@Danra我假设OP对于使用自己定义的构造函数的成员是合适的