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

C ++最令人烦恼的解析再次

C ++最令人烦恼的解析再次

C++
LEATH 2019-08-09 10:02:03
C ++最令人烦恼的解析再次直接来自http://herbsutter.com/2013/05/09/gotw-1-solution/虽然widget w();对我来说很清楚,但我不知道下面的代码如何成为函数声明?// same problem (gadget and doodad are types) // widget w( gadget(), doodad() );   // pitfall: not a variable declaration这怎么可能?
查看完整描述

2 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

在函数声明中,类型数组的参数衰减为指向第一个元素的指针,函数类型的参数衰减为函数指针,因此签名将是:

widget w( gadget(*)(), doodad(*)() );

也就是说,一个函数将第一个参数作为一个指向函数的指针,该函数不带参数并返回gadget,它将第二个参数作为一个指向函数的指针,该函数不带参数并返回a doodad并且函数本身返回一个widget

还有更多有趣或令人困惑的案例,例如:

// assume 'x' is a variable defined somewhere:
widget w(gadget(x));

怎么可能被解释为函数声明?我的意思是,x是一个变量,对吗?那么,声明变量时,你可以添加额外的括号,所以gadget x;gadget (x);这两个声明相同的变量x。这同样适用于函数参数,因此上面的代码看起来像一个函数的声明,它接受一个名为xtype 的第一个参数gadget并返回一个widget...


查看完整回答
反对 回复 2019-08-09
  • 2 回答
  • 0 关注
  • 350 浏览

添加回答

举报

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