Effective STL 条款6
2016-04-12 09:20
190 查看
本节的重点是有关C++语句解析的讨论
看一段代码:1: int f(double d); 2: int f(double (d)); 3: int f(double);
上面的三种函数声明的形式有区别吗?
回答没有,对的,当然没有,只不过形式不同而已。
再看下面这个片段
class A{....}; A a();
请问上面片段中的a是类对象还是返回一个类A类型的函数?
答案是难以判定的,它既符合调用无参构造函数的类对象,又符合声明函数的形式。
所以,我们应该避免此类写法,以减少代码的解析歧义。
切入正题,那么它对STL有什么影响?
1: ifstream dataFile("ints.dat"); list<int> data(istream_iterator<int>(dataFile),istream_iterator<int>()); 2:ifstream dataFile("ints.data"); istream_iterator<int> dataBegin(dataFile); istream_iterator<int>dataEnd; list<int> data(dataBegin,dataEnd);
请问,上面的代码1和2有区别吗?
答案是有,区别很大。
代码1声明了一个返回类型为list的函数,代码2定义了一个list类型的容器,并且初始化值来自于迭代器dataBegin和dataEnd
造成这种区别的原因就是解析歧义造成的。
相关文章推荐
- JSP和HTML和JS - 双引号嵌套问题解决方案(不断完善中)
- 剑指offer系列之21:从上往下打印二叉树
- FullPage.js 活动单页 - 全屏滚动插件
- Angular.js+Bootstrap实现表格分页
- 剑指offer系列之20:栈的压入弹出序列
- 制作手机浏览器显示格式的HTML页面
- 导出有样式的EXCEL
- 接收json格式错误,开头出现多余问号
- json字符串转成 Map/List
- javascript for in 循环
- 剑指offer系列之19:包含min函数的栈
- 文本框失去焦点后js判断输入是否为数字
- JS 去除数组中重复的元素
- JS 判断某个字符串是否存在与数组中
- 剑指offer系列之18:顺时针打印矩阵
- Hadoop Version History and Feature
- 剑指offer系列之17:二叉树的镜像
- BZOJ 1032 JSOI 2007 祖码Zuma 区间DP
- 上传图片js判断
- referer问题