为了账号安全,请及时绑定邮箱和手机立即绑定

带空括号的默认构造函数

带空括号的默认构造函数

月关宝盒 2019-05-24 15:33:20
带空括号的默认构造函数有没有什么好的理由在C ++中调用默认构造函数时,一组空的圆括号(括号)无效?MyObject  object;  // ok - default ctorMyObject  object(blah); // okMyObject  object();  // error我似乎每次都自动输入“()”。是不是有一个很好的理由不允许这样做?
查看完整描述

4 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

最烦恼的解析

这与所谓的“C ++最令人烦恼的解析”有关。基本上,任何可以被编译器解释为函数声明的东西都将被解释为函数声明。

同一问题的另一个例子:

std::ifstream ifs("file.txt");std::vector<T> v(std::istream_iterator<T>(ifs), std::istream_iterator<T>());

v 被解释为具有2个参数的函数声明。

解决方法是添加另一对括号:

std::vector<T> v((std::istream_iterator<T>(ifs)), std::istream_iterator<T>());

或者,如果您有C ++ 11和列表初始化(也称为统一初始化)可用:

std::vector<T> v{std::istream_iterator<T>{ifs}, std::istream_iterator<T>{}};

有了这个,就无法将其解释为函数声明。


查看完整回答
反对 回复 2019-05-24
?
心有法竹

TA贡献1866条经验 获得超5个赞

因为它被视为函数的声明:


int MyFunction(); // clearly a function

MyObject object(); // also a function declaration


查看完整回答
反对 回复 2019-05-24
?
互换的青春

TA贡献1797条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-05-24
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

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


查看完整回答
反对 回复 2019-05-24
  • 4 回答
  • 0 关注
  • 740 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信