const double *cptr;//cptr 是一个指向const double 的指针,我们可以重新赋值cptr 使其指向不同的对象但不能修改cptr 指向的对象
任何试图将一个非const 对象的指针指向一个常量对象的动作都将引起编译错误
对传入某函数的const vector<>&类型,既不可以改变vector中的元素,也不可以对x做赋值(如果不加const,两者都可以),如下例:
void f(const vector<int>& x){ //x.clear();//err //x.push_back(2);//err //x[0] = 5;//err vector<int> y; y.push_back(4); //x = y;//err printf("%d\n", x[0]); }
如果传入某函数的const vector<Elem>&中类型Elem是自定义的class时,只能调用常成员方法,如下例中getA那种带const的,而这个const保证了该方法不能修改类成员变量,否则报错
class Elem{ private: int _a; public: void setA(int x){ _a = x; } int getA() const { //_a = 3;//err return _a; } }; void f3(const vector<Elem>& x){ x[0].getA(); //x[0].setA(23);//err }
总之,const很复杂,不想用了……