免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3524 | 回复: 16

大湿 Lippman 也犯错? [复制链接]

论坛徽章:
0
发表于 2012-05-14 23:11 |显示全部楼层
中文:《深度探索C++对象模型》侯捷译
1.2 关键词所带来的差异(第15页)
// 不知道下面是个 declaration 还是 invocation
// 直到看到整数常量 1024 才能决定
int (*pf)(1024);


英文:《Inside the C++ Object Model》
1.2 A Keyword Distinction (chm版,页数不详)
// don't know if declaration or invocation
// until see the integer constant 1024
int ( *pf )( 1024 );


这用脚丫子看都明显是声明啊

论坛徽章:
0
发表于 2012-05-14 23:14 |显示全部楼层
补上英文版前面的一句话:
Similarly, if C++ were to throw off the C declaration syntax, lookahead would not be required to determine that the following is an invocation of pf rather than its definition:

// don't know if declaration or invocation
// until see the integer constant 1024
int ( *pf )( 1024 );

论坛徽章:
0
发表于 2012-05-15 00:23 |显示全部楼层
这难道不是一个声明么?

一个int*,赋值1024,只是1024到int*需要显示类型转换才行。所以你这个应该根本就编译不过。

论坛徽章:
0
发表于 2012-05-15 01:12 |显示全部楼层
英文是说它是 invocation。。。侯捷的翻译是说它是调用。

我当然认为这是声明啊。

然后这不是我写的,是原书上的。转换的问题是次要的。

论坛徽章:
0
发表于 2012-05-15 01:14 |显示全部楼层
而且不像是笔误,因为后面有个对比:

On the following declaration, lookahead does not even work:

// meta-language rule:
// declaration of pq, not invocation
int ( *pq )( );

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2012-05-15 04:06 |显示全部楼层
整个表达式有可能是:
1. 定义一个变量,最后的括号就是构造函数的调用操作符
2. 声明一个函数,最后的括号就是参数列表


见Eff STL, Item 6: Be alert for C++’s most vexing parse。 以前有个在线网站的,貌似关了……
或者看这个吧: http://en.wikipedia.org/wiki/Most_vexing_parse

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
发表于 2012-05-15 08:25 |显示全部楼层
看了 OwnWaterloo 说的,我想我明白了,是不是这么回事?

编译器看到 int (*pf) 时还不能确定它是想 定义一个变量,如 int (*pf)( 0 )
还是想 定义一个函数,如 int (*pf)()

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-05-15 09:09 |显示全部楼层
我是看到题目进来的。大师也是常人,犯错是正常的。

对于楼主所说的例子,就是variable definition了。

论坛徽章:
0
发表于 2012-05-15 11:58 来自手机 |显示全部楼层
嗯,这类书我一般是不看的,前天有人问我。我第一眼还当是错误的函数指针声明了,呵呵。除了显式转换,类型是不会出现在表达式前面的,只能是声明。

书上这段核心意思是说明语法解析中的超前扫描的影响。

论坛徽章:
0
发表于 2012-05-15 13:28 |显示全部楼层
回复 6# OwnWaterloo


2. 声明一个函数,最后的括号就是参数列表

那后面就不该是值,所以你这个说法就有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP