const可用于修饰变量,成员函数等待.
用于成员函数的const
规则一
const object (data members不得变动) |
non-const object (data members可变动) |
|
---|---|---|
const member functions (保证不更改data members) |
yes | yes |
non-const member functions (不保证data members不变) |
no | yes |
规则二
当成员函数的const和non-const版本同时存在,const object只会(只能)调用const版本,non-const object只会(只能)调用non-const版本.
关于规则二的例子:
class template std::basci_string<…>有如下两个member functions:
1 | charT operator[](size_t pos) const { /*...*/ } // 需要考虑cow |
COW:copy on write
多个对象共享底层字符串对象;常量对象不会修改其底层对象,因此不需要考虑COW;对于非常量对象,需要考虑COW,当多个共享底层字符串的对象中的某个需要修改底层数据时,需要为该对象复制一份底层对象,让其独享.