您的位置:首页 > 编程语言 > C语言/C++

《大规模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为参数的模板,当以一个整数数值或任意编译时常量整数表达式声明时,将无法被实例化:
template
class 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: