为什么后置++和后置--是单目运算符却有一个int形参

为什么后置++和后置--是单目运算符却有一个int形参

今天做到了这样的一道题在这里插入图片描述
我是这么想的:友元函数,那也就是说没有this指针,所以操作数都应该在函数的参数列表里。

A、+是双目运算符,参数列表里只有1个形参,很明显有this指针,所以A不是友元函数。
B、–是单目运算符,参数列表里只有1个参数,所以没有this指针,B是友元函数。
C、&&是双目运算符,参数列表里有2个参数,也没有this指针,所以C也是友元函数。
D、++是单目,有2个参数,当时我很疑惑,如果是友元,那应该只有1个参数,如果是类成员,那应该没有参数,那么D到底是不是友元函数呢?

后来我看了题下大佬的解释:
题中B是前置 –
选项D是后置++
定义后置“++"或后置“–"运算是特例,它们是单目运算符,但需要两个形参,头一个形参是作用对象,后一个是int形参;

看完这个解释我又产生了新的疑问
为什么后置++或后置–运算明明是单目运算符,但却需要两个形参呢?
后一个int形参是拿来做什么的呢?

带着新的疑问我又去看前置++、前置–和后置++、后置–的区别。

然后在本站找到了一篇帖子,是这么说的:
重载主要是两者形参上的区别:
前置++没有形参,而后置++有一个int形参,但是该形参也没有被用到。很奇怪,难道有什么特殊的用意?
其实也没有特殊的用意,只是为了绕过语法的限制。
前置++与后置++的操作符重载函数,函数原型必须不同。否则就违反了“重载函数必须拥有不同的函数原型”的语法规定。
虽然前置++与后置++的返回类型不同,但是返回类型不属于函数原型。为了绕过语法限制,只好给后置++增加了一个int形参。
原因就是这么简单,真的没其他特殊用意。其实,给前置++增加形参也可以;增加一个double形参而不是int形参,也可以。只是,当时就这么决定了。

所以前置++、前置–和后置++、后置–在形参上会有这样的区别完全就是因为函数重载的规则(参数类型、参数个数、或参数顺序需要不同),因为前置和后置都是++,在函数名上是相同的,如果参数个数没有不同的话就会被认为是同样的函数了。

我的疑问全部解除。下面是这篇帖子的连接,还有其他疑惑的朋友可以前去浏览:
https://blog.csdn.net/m0_37714594/article/details/81178402?biz_id=102&utm_term=%E4%B8%BA%E4%BB%80%E4%B9%88%E5%90%8E%E7%BD%AE++%E6%9C%89%E4%B8%A4%E4%B8%AA%E5%8F%82%E6%95%B0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-81178402&spm=1018.2118.3001.4449

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值