尽可能使用const

来源:互联网 发布:JS PDF 拆分 编辑:程序博客网 时间:2024/05/20 04:31

const 的一件奇妙事情是,它允许你指定一个语义约束(也就是指定一个"不
该被改动"的对象) ,而编译器会强制实施这项约束。它允许你告诉编译器和其他
程序员某值应该保持不变。只要这(某值保持不变)是事实,你就该确实说出来,
因为说出来可以获得编译器的襄助,确保这条约束不被违反。

 

     char* const p=great ;   //const point , non-const data

 

如果被指物是常量,有些程序员会将关键字const 写在类型之前,有些人会把
它写在类型之后、星号之前。两种写法的意义相同,所以下列两个函数接受的参数
类型是一样的z
void f1(const Widget* pw);
void f2(Widget const * pw);
两种形式都有人用,你应该试着习惯它们。

 

 

const 最具威力的用法是面对函数声明时的应用。在一个函数声明式内, const
可以和函数返回值、各参数、函数自身(如果是成员函数)产生关联。
令函数返回一个常量值,往往可以降低因客户错误而造成的意外,而又不至于
放弃安全性和高效性。举个例子,考虑有理数(rational numbers,详见条款24) 的
operator* 声明式z
class Rational { ... };
const Rational operator* (const Rational& lhs, const Rational& rhs);

 

 

if (a * b = c) //I I喔欧,其实是想做一个比较〈∞mpari阳1) 动作!
如果a 和b 都是内置类型,这样的代码直截了当就是不合法。而一个"良好的
用户自定义类型"的特征是它们避免无端地与内置类型不兼容  .因
此允许对两值乘积做赋值动作也就没什么意思了。将operato沪的回传值声明为
const 可以预防那个"没意思的赋值动作",这就是该那么做的原因。