operator[]相关

这篇博客讨论了C++中const对象调用operator[]重载函数的必要性。当尝试访问constMatrix对象的元素时,由于默认的operator[]返回的是非const引用,会导致编译错误。解决方法是提供一个const版本的operator[],以允许const对象安全地访问其成员。通过这样做,可以确保不会意外修改const对象的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

operator[]为什么得定义两个函数?
因为可能存在const对象,如果const对象调用这个函数
形参列表不同是无法调用的,必须使用带有const指针的函数,才会放心把成员变量的引用return 出去

仅凭this指针是没办法调用的

这是实例化const对象b之后,在cout处调用b[1][1]时编译报的错误
找不到const Matrix*类型的this指针,即必须有一个const修饰的对应的operator[]重载函数才行。
passing ‘const Matrix’ as ‘this’ argument discards qualifiers [-fpermissive]
cout << b[1][1] << endl;

#include <iostream>
#include <vector>
using namespace std;

class Matrix
{
public: //row、line为行  column为列
    Matrix(int rows, int cols) : value_(rows)
    {
    	//初始化每一行的列数
        for (int i = 0; i < rows; i++) 
            value_[i].resize(cols);
    }

    vector<int>& operator[](int row)
    {
        return value_[row];
    }
    //operator[]
    //rows
    //cols
private:
    vector<vector<int>> value_;
};

int main()
{
    Matrix a(2,2);
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 2; j++)
            a[i][j] = i + j;

    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 2; j++)
            cout << a[i][j] << " ";
        cout << endl;
    }

    const Matrix b(a);		//定义了一个const Matrix类型的对象
    cout << b[1][1] << endl;		//编译在做这一步的时候发生了报错。
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值