C++ const

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很复杂,不想用了……

原文地址:https://www.cnblogs.com/fstang/p/3032256.html