在c++中,空的圆括号(圆括号)对于调用默认构造函数无效,有什么好的理由吗?
MyObject object; // ok - default ctor
MyObject object(blah); // ok
MyObject object(); // error
我似乎每次都会自动输入“()”。有什么理由不允许这样做吗?
在c++中,空的圆括号(圆括号)对于调用默认构造函数无效,有什么好的理由吗?
MyObject object; // ok - default ctor
MyObject object(blah); // ok
MyObject object(); // error
我似乎每次都会自动输入“()”。有什么理由不允许这样做吗?
当前回答
正如其他人所说,它是一个函数声明。从c++ 11开始,你可以使用大括号初始化,如果你需要看到显式地告诉你使用默认构造函数的空值。
Jedi luke{}; //default constructor
其他回答
相同的语法用于函数声明——例如,函数对象,不接受参数并返回MyObject
因为它被视为函数的声明:
int MyFunction(); // clearly a function
MyObject object(); // also a function declaration
你也可以使用更详细的构造方式:
MyObject object1 = MyObject();
MyObject object2 = MyObject(object1);
在c++ 0x中,这也允许auto:
auto object1 = MyObject();
auto object2 = MyObject(object1);
正如我多次提到的,这是一种宣言。这是向后兼容的方式。这是c++中因其遗留问题而显得愚蠢/不一致/痛苦/虚伪的众多领域之一。
正如其他人所说,它是一个函数声明。从c++ 11开始,你可以使用大括号初始化,如果你需要看到显式地告诉你使用默认构造函数的空值。
Jedi luke{}; //default constructor