带空括号的默认构造函数

带空括号的默认构造函数

有没有什么好的理由在C ++中调用默认构造函数时,一组空的圆括号(括号)无效?


MyObject  object;  // ok - default ctor

MyObject  object(blah); // ok


MyObject  object();  // error

我似乎每次都自动输入“()”。是不是有一个很好的理由不允许这样做?


月关宝盒
浏览 802回答 4
4回答

UYOU

最烦恼的解析这与所谓的“C ++最令人烦恼的解析”有关。基本上,任何可以被编译器解释为函数声明的东西都将被解释为函数声明。同一问题的另一个例子:std::ifstream&nbsp;ifs("file.txt");std::vector<T>&nbsp;v(std::istream_iterator<T>(ifs),&nbsp;std::istream_iterator<T>());v&nbsp;被解释为具有2个参数的函数声明。解决方法是添加另一对括号:std::vector<T>&nbsp;v((std::istream_iterator<T>(ifs)),&nbsp;std::istream_iterator<T>());或者,如果您有C ++ 11和列表初始化(也称为统一初始化)可用:std::vector<T>&nbsp;v{std::istream_iterator<T>{ifs},&nbsp;std::istream_iterator<T>{}};有了这个,就无法将其解释为函数声明。

心有法竹

因为它被视为函数的声明:int MyFunction(); // clearly a functionMyObject object(); // also a function declaration

互换的青春

相同的语法用于函数声明 - 例如函数object,不带参数和返回MyObject

拉莫斯之舞

因为编译器认为它是函数的声明,不接受任何参数并返回MyObject实例。
打开App,查看更多内容
随时随地看视频慕课网APP