首席IT民工 2020-07-20 10:27 采纳率: 100%
浏览 160
已采纳

cpp中const函数的意义何在?

要求接收方调用返回值是const修饰,这不是白白增加了约束么?

const char * GetString(void);
char *str = GetString();//报错

非const不能调用const

class A{
public:
    void func1(void) const {
        cout << "常函数" << endl; 
        // func2(); //错误 因为func1是const类型的
    }
    void func2(void) {
        cout << "非常函数" << endl; 
        m_i++; 
        func1(); 
    }
private:
    int m_i; 
};

同一个名字的函数可以有两个,通过有无const来区分

class A{
public:
    void func(int a = 0) const{
        cout << "常函数" << endl;         
    }
    void func(int a = 0){
        cout << "非常函数" << endl; 
    } 
private:
    int m_a; 
}; 

int main() {
    A a; 
    a.func(); 
    const A a1 = a; //const 匹配后面一个函数 
    a1.func();  
}

无法理解这些古怪的约束用处何在。。。

  • 写回答

1条回答 默认 最新

  • LTQ777 2020-07-20 10:36
    关注

    为了避免日后维护时产生不必要的麻烦,如果你希望有些函数的参数/内部/返回值不应被修改最好就应该加上const修饰符,这样之后在用或者别人在用的时候就知道这个位置不能被修改。
    毕竟今天写的代码可能一周后就忘了当时怎么想的了,直接凭感觉改很可能违背当时的设计思路。
    另外是非const可以调用const,const不能调用非const,问题中写错了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题