qq_34800076 2020-01-04 16:27 采纳率: 25%
浏览 133

c++中按值返回的[]重载和返回引用的[]重载有什么区别讲究,为什么同时定义这么两个?

图片说明

c++primer plus的P540

  • 写回答

1条回答 默认 最新

  • Kim_小星兴 2020-01-04 17:06
    关注

    首先需要解释的是 取址符号 '&',第一个operator 前的类型是double & ,也就是说,

    Student a; 
    a[0] = 1.1;
    

    那么 a对象里面的scores[0]的值就会真的被改变.
    这样可能不明显我们换一个函数你就有感觉了

    class Student
    {
    public:
        int id[20];
        int& at(int x)
        {
            return id[x%20];
        }
    };
    int main(void)
    {
        Student a;
        a.at(0) = 4;
        cout<< a.id[0];
        return 0;
    }
    

    这是第一个函数的作用,就是让**外部能使用运算符直接修改这个对象里面的值**,而不是使用 一个函数setScores(int index,double value);

    第二个后面加上了const,也就意味着这个函数与上一个函数不一致,注意这并不是重载,在编译器里认为这两个函数是不一样的函数,const表示他可以被const 属性的对象调用;
    同时也是因为重载函数不允许传参一致但返回值类型不一致;

    那么加上这个关键字之后的作用是什么呢?

    作用就是: 这个函数内做的所有操作都不能改变this->里面的任何值,调用方法也只能调用const 后缀的方法,但是相对的如果我们 定义了一个变量

    const Student a,那么我使用 a[0]那么就只能是第二个函数.
    不知道这样解释你明白了么

    评论

报告相同问题?

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图