1. const指定一个不该被改动的对象,它允许你告诉编译器和其它程序员某值应该保持不变
2. const char* p = greeting; //non-cosnt pointer, const data
char* const p = greeting; //const pointer, non-const data
const char* const p = greeting; //const pointer, const data
如果const出现在 * 左边, 表示被指物是常量;如果出现在 * 右边,表示指针自身是常量。
void f1(const Widget* pw);
void f2(Widget const* pw);
两种写法意义相同
3. STL迭代器的作用就像个T*指针
std::vector<int> vec;
……
const std::vector<int>::iterator iter = vec.begin(); //iter的作用像T* const
std::vector<int>::const_iterator cIter = vec.begin(); //cIter的作用像const T*
因此,如果希望迭代器所指的东西不可被改变,应用const_iterator
4. 令函数返回一个const
const Rational operator*(const Rational& lhs, cosnt Rational& rhs);
……
Rational a,b,c;
if(a*b = c)… //本来想做比较==,若为const,则会报错
如果a,b是内置类型,则不合法;但良好的自定义类型则允许对两值乘积做赋值动作。
const参数 除非有需要改动参数或local对象,否则将它们声明为const,则可以发现“==”意外键成“=”的错误。
5. const成员函数
1>. 它们使class接口比较容易理解,因为得知哪个函数可以改动对象内容而哪个函数不行很重要
2>. 它使操作const对象成为可能
如果两个成员函数只有常量性不同,可以被重载
真实程序中const对象大多用于passed by pointer-to-const或passed by reference-to-const的传递结果