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代码>。