const修饰函数放在函数前和函数结尾的区别

const 在 C++ 中可以出现在函数声明的多个位置,不同的位置有不同的含义。我们可以看到 const 出现在函数声明的前面或结尾,它们的作用不同。下面来解释这两种情况。

  1. const 放在函数返回类型前
    当 const 放在函数返回类型之前时,表示返回的值是常量,即该函数返回的值不能被修改。例如:
const int getValue() {
    return 5;
}

含义:函数返回的 int 类型值是常量,调用者不能修改返回值。例如,不能将返回的值作为左值(L-value)。
应用场景:主要用于防止调用者对返回值进行修改,确保返回的值保持不变。

int main() {
    const int result = getValue();  // result 是常量
    // result = 10;  // 错误,不能修改常量
    return 0;
}

注意:如果函数返回的是基本数据类型(如 int),在大多数情况下加 const 意义不大,因为返回值是拷贝,无法修改原值。但如果函数返回的是指针或引用,const 变得有意义。

  1. const 放在函数的结尾
    当 const 出现在函数定义的结尾(靠近参数列表之后),它用于修饰类的成员函数,表示该成员函数不会修改对象的成员变量。例如:
class MyClass {
public:
    int getValue() const {
        return value;
    }

    void setValue(int val) {
        value = val;
    }

private:
    int value = 0;
};

含义:const 修饰的成员函数不能修改当前对象的成员变量,也不能调用其他非 const 成员函数。即该函数只能读取对象的状态,而不能修改它。
应用场景:当你希望保证某个成员函数不改变对象的状态时,可以将其声明为 const 成员函数。
例如:

int main() {
    const MyClass obj;  // 常量对象
    obj.getValue();     // 可以调用
    // obj.setValue(10); // 错误,常量对象不能调用非 const 成员函数
    return 0;
}

getValue() 是 const 成员函数,因此可以在 const 对象上调用。
setValue() 没有 const 修饰,不能在 const 对象上调用,因为它可能修改对象的成员变量。
总结
const 放在函数返回类型前:表示返回的值是常量,调用者不能修改返回的值,通常用于返回指针或引用时防止修改数据。
const 放在函数结尾(类成员函数):表示这个成员函数不会修改当前对象的成员变量,也不能调用其他非 const 成员函数,用于保持对象的状态不被改变。
这两种 const 关键字的位置和作用不同,需要根据具体的情况使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值