《大规模C++程序设计》读书笔记27
2008-03-05 22:17
225 查看
Technorati 标签: C++,大规模C++程序设计,读书笔记
指导方针29:避免在接口中使用short,改为使用int。
C++语言要求,声明为char或short的变量,在参与一个表达式之前,要被自动提升为int类型,也就是说,除了sizeof和取地址&之外,在一个表达式中不会直接使用char或short类型值。
原则106:在代码中直接明确的说明设计决策(而不是依赖注释)是一个设计目标;设计能安全使用和容易维护的健壮接口偶尔会与这个目标形成竞争关系。
在接口中使用short,有以下问题:
不能保证编译时出现的溢出不会在运行时出现,C++允许算术溢出在运行时悄悄出现。
不能检测溢出。如果接口使用int,我们至少可以发现实现范围之外的int;传递一个int起码可以允许我们设置前置条件。
将short暴露在接口中,限制了任何实现可提供的short的大小,并消除了我们检测溢出的能力,限制实现选择是降低封装的一个症状。
在接口中使用int降低了效率,因为如果传入一个int的话,实参必须使其高位被屏蔽掉,这需要额外的工作,因而降低了运行时效率。
会干扰函数重载。如果有两个函数:f(double)和f(short),函数调用f(10)会产生二义性。
会干扰模板实例化。按照模板实例化的规则,一个模板的类型必须与实参严格匹配,以一个short为参数的模板,当以一个整数数值或任意编译时常量整数表达式声明时,将无法被实例化:
指导方针29:避免在接口中使用short,改为使用int。
C++语言要求,声明为char或short的变量,在参与一个表达式之前,要被自动提升为int类型,也就是说,除了sizeof和取地址&之外,在一个表达式中不会直接使用char或short类型值。
原则106:在代码中直接明确的说明设计决策(而不是依赖注释)是一个设计目标;设计能安全使用和容易维护的健壮接口偶尔会与这个目标形成竞争关系。
在接口中使用short,有以下问题:
不能保证编译时出现的溢出不会在运行时出现,C++允许算术溢出在运行时悄悄出现。
不能检测溢出。如果接口使用int,我们至少可以发现实现范围之外的int;传递一个int起码可以允许我们设置前置条件。
将short暴露在接口中,限制了任何实现可提供的short的大小,并消除了我们检测溢出的能力,限制实现选择是降低封装的一个症状。
在接口中使用int降低了效率,因为如果传入一个int的话,实参必须使其高位被屏蔽掉,这需要额外的工作,因而降低了运行时效率。
会干扰函数重载。如果有两个函数:f(double)和f(short),函数调用f(10)会产生二义性。
会干扰模板实例化。按照模板实例化的规则,一个模板的类型必须与实参严格匹配,以一个short为参数的模板,当以一个整数数值或任意编译时常量整数表达式声明时,将无法被实例化:
templateclass pub_BitVec { int d_bits : N; public: BitVec(); int operator[](int i); void set(int i); void clear(int i); void toggle(int i); }; BitVec<2> v1; // expecting short got int BitVec v1; // ok BitVec<5 - 3> v2; // expecting short got int BitVec v2; // ok
相关文章推荐
- 《大规模C++程序设计》读书笔记15
- 《大规模C++程序设计》读书笔记18
- UNIX 读书笔记01 分类: Linux 2015-05-27 22:20 42人阅读 评论(0) 收藏
- Programming in Scala (Second Edition) 读书笔记27 注解
- 《大规模C++程序设计》读书笔记2
- 《大规模C++程序设计》读书笔记5
- 《大规模C++程序设计》读书笔记19
- 《Effective C#》读书笔记——条目27:让类型支持序列化<使用C#表达设计>
- python27读书笔记0.1
- 《大规模C++程序设计》读书笔记3
- 《大规模C++程序设计》读书笔记10
- 《大规模C++程序设计》读书笔记12
- 《大规模C++程序设计》读书笔记30
- 读书笔记《Effective C++》条款27:尽量少做转型动作
- lua程序设计第二版 读书笔记(27-28章)
- 《大规模C++程序设计》读书笔记6
- 《大规模C++程序设计》读书笔记4
- 《大规模C++程序设计》读书笔记7
- 《大规模C++程序设计》读书笔记13
- 《大规模C++程序设计》读书笔记17