《C++覆辙录》——2.7:“函数还是对象”的多义性

本节书摘来自异步社区出版社《C++覆辙录》一书中的第2章,第2.7节,作者: 【美】Stephen C. Dewhurst(史蒂芬 C. 杜赫斯特),更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.7:“函数还是对象”的多义性

对象的默认初始化语句不应该写成一个空的初始化实参列表的形式,因为它会被解释成一个函数声明:

String s("Semantics, not Syntax! "); // 显式指定了用以初始化的实参
String t; // 默认的对象初始化语句⑧
String x();⑨// 一个函数声明```
⑧译者注:对象名后不带括号。
⑨译者注:这里声明了一个不带实参并返回`String`型别的函数,可能违反代码作者本意。
这是一个C++语言内廪的多义性。实践角度来说,语言“掷硬币”决定了x是一个函数声明20。请注意,该多义性问题在new表达式中并不发作:

String *sp1 = new String(); // 这里没有多义性⑩
String *sp2 = new String; // 一样的意思`
⑩译者注:出于一致性考量不推荐。
当然,第二种形式更好。因为它被更广泛地使用,和对象的声明语句也更具正交性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值