c++ class function const

const除了可以修饰变量外,其还可以在类函数的末尾添加const

一般的成员函数如:

class A {
 public:
    void modify(int n);
};
实际的modify相当于是void modify(A *this, int n),

这里传递的是一个A的指针类型,但这也意味着这个modify函数可能会对成员变量进行修改。

而将代码修改为:

class A {
 public:
    void modify(int n) const;
};
那么modify相当于是void modify(const A *this, int n),

即这里的this是指向const A的,因此该方法不能通过this来对本对象的变量进行修改


那么下面的代码是否能成功执行呢?:

class A {
 public:
    void modify(int n) const {
        num = n;
    }
 private:
    int num;
};

int main() {
    A a;
    a.modify(3);
    return 0;
}
这里是不能成功执行的,

首先由上面的方法,我们可以知道,void modify(int n) const实际是void modify(const A *this, int n),

那么整个方法就相当于为:

void modify(const A *this, int n) {

this->num = n;

}

这显然是不对的


接着下面这份代码是否能成功执行呢?:

class A {
 public:
    void modify(int n) {
    }
    void modify1(int n) const {
    }
};

int main() {
    const A a;
    a.modify(3);
    a.modify1(3);
    return 0;
}
这里的a.modify(3)是错误的,而a.modify1(3)是正常执行的

还是将代码还原相等的代码

void modify(int n)->void modify(A *a, int n) {}

void modify1(int n) const -> void modify(const A *a, int n) {}

而const A a,是const A类型,而c++中是不允许将const T*转换给T*的(除了用const_cast<T*>),那么自然对于void modify(int n)是错误的

而void modify1(int n) const是正确的



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值