在c++中,空的圆括号(圆括号)对于调用默认构造函数无效,有什么好的理由吗?

MyObject  object;  // ok - default ctor
MyObject  object(blah); // ok

MyObject  object();  // error

我似乎每次都会自动输入“()”。有什么理由不允许这样做吗?


当前回答

相同的语法用于函数声明——例如,函数对象,不接受参数并返回MyObject

其他回答

你也可以使用更详细的构造方式:

MyObject object1 = MyObject();
MyObject object2 = MyObject(object1);

在c++ 0x中,这也允许auto:

auto object1 = MyObject();
auto object2 = MyObject(object1);

正如其他人所说,它是一个函数声明。从c++ 11开始,你可以使用大括号初始化,如果你需要看到显式地告诉你使用默认构造函数的空值。

Jedi luke{}; //default constructor

我猜,编译器不会知道这个语句:

MyObject object();

是一个构造函数调用或函数原型,声明一个名为object的函数,返回类型为MyObject,不带形参。

相同的语法用于函数声明——例如,函数对象,不接受参数并返回MyObject

因为编译器认为它是一个不接受参数并返回MyObject实例的函数声明。