在 c++ 中将对象设置为等于同一类的构造函数是否有效?



代码如下:

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"); }
};

这将打印两次"做了一个A!",确认你的假设。

如果我不得不猜测,我会说这段代码是由来自 Java 的人编写的,其中实例变量初始化为null,而不是自动调用默认构造函数。像这样的代码不是惯用C++,如果我在代码审查中看到它,我应该认为它会引起人们的注意。要么使用B() : a() {}显式构造对象,要么按照您的建议,通过根本不提及它来让它默认构造。

最新更新