关键字const 非常多才多艺。在类的外部,你可以将它用于全局常量或命名空间常量,就像那些在文件、函数或模块范围内被声明为 static 的对象。在类的内部,你可以将它用于 static 和 non-static 数据成员上。对于指针,你可以指定这个指针本身是 const,或者它所指向的数据是 const,或者两者都是,或者都不是。
char greeting[] = "Hello";
char *p = greeting; // non-const pointer, const char *p = greeting; // non-const pointer, char * const p = greeting; // const pointer, const char * const p = greeting; // const pointer, |
void f1(const Widget *pw); // f1 takes a pointer to a // constant Widget object void f2(Widget const *pw); // so does f2 |
std::vector<int> vec; ... const std::vector<int>::iterator iter = // iter acts like a T* const vec.begin(); *iter = 10; // OK, changes what iter points to ++iter; // error! iter is const std::vector<int>::const_iterator cIter = //cIter acts like a const T* vec.begin(); *cIter = 10; // error! *cIter is const ++cIter; // fine, changes cIter |
对 const 最强有力的用法来自于它在函数声明中的应用。在一个函数声明中,const 既可以用在函数返回值上,也可以用在个别的参数上,对于成员函数,还可以用于整个函数。