C++ 可将对象设置为c+中相同类的构造函数+;?

C++ 可将对象设置为c+中相同类的构造函数+;?,c++,C++,代码如下: class A{ public: A(); }; class B{ public: B() { a=A(); } private: A a; }; 它编译得不错,但我不确定它是否正确,以及它的用途。我相信代码会将“a”设置为默认构造函数中的值,但这也是创建对象时“a”已经相等的值。有效吗?彻底地无意义的可能你说得对,那里正在制造一个额外的物体。我们可以通过让A默认构造函数显示一些内容来验证这一点 class A

代码如下:

    class A{
public:
    A();
};
    class B{
public:
    B()
    {
        a=A();
    }
private:
    A a;
};

它编译得不错,但我不确定它是否正确,以及它的用途。我相信代码会将“a”设置为默认构造函数中的值,但这也是创建对象时“a”已经相等的值。

有效吗?彻底地无意义的可能你说得对,那里正在制造一个额外的物体。我们可以通过让
A
默认构造函数显示一些内容来验证这一点

class A{
public:
  A() { printf("Made an A!\n"); }
};
这将打印两次“madea A!”,确认您的假设


如果我不得不猜测的话,我会说这段代码是由来自Java的人编写的,在Java中,实例变量被初始化为
null
,而不是自动调用默认构造函数。这样的代码不是惯用的C++,如果我在代码审查中看到它,我会认为它会引起眉毛。要么用
B():a(){}
显式构造对象,要么像您所建议的那样,完全不提及它,让它默认构造。

为什么要否决?这是一个非常公平的问题,IMHO。首先也是最重要的,
=
并不意味着设置为等于,而是意味着赋值(或初始化取决于上下文)。将同一个值赋给同一个变量(虽然在本例中没有意义),而不是“默认构造函数中的值”,而是“默认构造的对象”,这是非常好的。与
ab相同;a=b