C++中类成员函数参数前const,返回值前加const 以及 函数声明后面加const作用及区别

在看公司C++的source code时,我们发现在一个类class里面的成员函数,有3个地方都有可能加const关键字

1. 第1个地方是函数内的形参前面加const

    int fun(const int a)  =>  这个是表示参数a在函数fun内部不能被修改, 如果在函数内的语句试图修改a,编译器就会报错

2. 第2个地方是函数的返回值前面加const

const int* fun()  => 函数返回的指针或者引用,加const规定返回值不能修改

eg:

  int& GetNum();  => 返回的是一个左值,它引用的内容可以修改 , 比如可以这样写 GetNum() = 6; GetNum()在等号的左边,所以说返回一个左值. 这点和C#很不一样,C#中肯定不能这样写

  const int& GetNumConst(); => 返回的是一个右值,  它引用的内容不可以被修改. 你不能写 GetNumConst() = 8, 否则编译器会报错

复制代码
#include <iostream>
using namespace std;

class NumberHandle {
public:
    int& GetNum() {
        return m_num;
    }

    const int& GetNumConst() {
        return m_num;
    }

    void ShowNum() {
        cout << "Number: " << m_num << endl;
    }

private:
    int m_num = 0;
};

int main()
{
    NumberHandle stu;
    stu.ShowNum();

    stu.GetNum() = 5; // 会修改成员变量的值
    stu.ShowNum();

    stu.GetNumConst() = 6; // 编译器会报错
    stu.ShowNum();

    return 0;
}
复制代码

 

 所以,很多时候,在C++代码编写中, 为了安全起见,在函数的返回值加上 const,使得函数体不能作为左值。

 

3. 第3个地方是函数后面加上const   => const 修饰函数体时,放到函数体的行尾处,表明在该函数体内,不能修改对象的数据成员,且不能调用非 const 成员函数。

   int fun() const => 这个表明这是个只读函数,在这个只读函数内部,是不能够去改变这个函数所在的类中的成员变量的, 也不能够去调用这个函数所在的类中的其他非const成员函数. 

复制代码
#include <iostream>
using namespace std;

class NumberHandle {
public:
    void SetNum(int num) {
        m_num = num;
    }

    void SetNumConst(int num) const {
        m_num = num;
    }

    void ShowNum() {
        cout << "Number: " << m_num << endl;
    }

private:
    int m_num = 0;
};

int main()
{
    NumberHandle stu;
    stu.ShowNum();

    stu.SetNum(6); // 正确
    stu.ShowNum();

    stu.SetNumConst(8); // 编译器会报错
    stu.ShowNum();

    return 0;
}
复制代码

 

 

 

在C++中,const强大的地方就是在于这里,它不像C#中那样,只是用来定义常量。而是在C++中可以用来修饰函数参数,函数返回值,函数体

被const修饰的东西都会受到强制保护,可以防止意外改动,提供了程序的健壮性. 所以通常都建议:  use const whenever you need.

 

posted on   新西兰程序员  阅读(660)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2016-05-12 转载 在.net中使用GAC
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示