下标运算符究竟是单目运算符还是双目运算符

int arr[10] = { 0 };

arr[0] = 6;

char str[100] = "";

str[0] = '8';

凡是接触过编程的所有人都接触过这种写法吧。

学习过C++的同学可能都接触过运算符重载,不知道教材或者导师有没有提过[]下标运算符的重载。

有的是当做单目运算符教的,理由是[]中间只有那么一个操作数,那么真的是这样吗?

我们来尝试写一写[]运算符重载的声明:

        返回类型 &operator(const int 参数1);

乍一看不就一个操作数吗,那么这我们写一个友元全局版的:

        friend 返回类型 &operator(类名 参数1, const int 参数2);

这就变成两个操作数了。那不写第一个参数可以吗,当然不行了,除非这个对象是静态的,你可以在函数内使用指针找到他,如果是全局变量则直接写它的标识符进行使用(其实还是两个操作数)。如果你别的什么也不用只用这个int参数,那你面对这个参数将一脸茫然,不知所措。

所以[]就是双目运算符了?正确答案是:一定不是单目运算符,在重载时可以看作它是个双目运算符,但不是真正意义上的双目运算符。使用[]下标运算符最重要的用途是用来索引,通常目的是找出一片空间其中特定的一小块空间,这小块空间也不一定是有作为“值”的意义,如:

        int arr[10][5];

int arr[2]就是arr这块大空间中的一小块空间,一般来说这小块空间的值是没有意义的。

C++是把它归类于其他运算符(或者说后缀)的,重载时,可以看作双目运算符来进行重载。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值