一条线和两行声明之间的差异

Difference between one line and two line declaration?

本文关键字:之间 声明 两行 一条      更新时间:2023-10-16

在C 中,

之间是否存在任何区别
Object o;
o = Object(); // calling the class constructor

Object o = Object(); // one-line declaration and construction

在其他语言(例如Java(中是同一件事吗?(除语法外(

是的,有区别。

实际上,没有"两行声明"之类的东西。您的术语全都关闭了。让我们看看

Object o;
o = Object();

在这里您声明了一个对象o,调用默认构造函数。然后,在下一行中,您还使用默认的构造函数创建了另一个另一个对象(这个没有名称的对象(,然后将其分配给 o。周围非常浪费。

Object o = Object();

在这里,您声明了一个对象o,用另一个对象调用复制构造函数(这个没有名称的对象(。这个称为"复制初始化",在此示例中也很浪费,尽管称为"复制elision"的功能可能会消除您的冗余。

您想要的是:

Object o;

这默认构造一个名为 o的对象;解决问题。

在第一个情况下,编译器会生成一个构造函数的调用,然后为创建第二个实例的构造函数的第二个调用,并使用复制或更多分配运算符。在第二种情况下,编译器仅生成一个构造函数。