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

关于最令人烦恼的解析的令人困惑的细节

关于最令人烦恼的解析的令人困惑的细节

C++
互换的青春 2019-08-14 15:20:43
关于最令人烦恼的解析的令人困惑的细节我的问题是如何将以下行解析为函数声明:vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());我理解Most Vexing Parse的大部分细节以及为什么第二个临时迭代器可以被解释为一个返回迭代器并且不带参数的函数的类型,但是我没有得到的是为什么第一个临时迭代器可以是解释为一种类型。它代表什么类型?我的想法是它会是某种函数类型,但我看不出名称是如何cin被使用的。它是否声明该参数是一个istream_iterator<int>名为cin?如果是这样,这是否意味着您可以任意地将函数的参数名称括起来?如果是这样,为什么?
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

istream_iterator<int>(cin)istream_iterator<int> cin与多余的parens 完全一样。这个声明符语法是从C继承而来的,我认为即使是C的发明者(Ken Thompson?)也将其描述为一个错误。


查看完整回答
反对 回复 2019-08-14
?
慕丝7291255

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

是的,它是参数名称。并且,是的,您可以添加一组括号,因为有时您必须这样做。

如果参数是函数指针,则void (*f)()需要像这样写。

编写标准的人没有花费宝贵的时间精确指出允许或实际需要括号的情况,因此标准只是说你可以拥有它们。


查看完整回答
反对 回复 2019-08-14
  • 3 回答
  • 0 关注
  • 810 浏览

添加回答

举报

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