Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重载后缀++;操作人员_C++_Operator Overloading - Fatal编程技术网

C++ 重载后缀++;操作人员

C++ 重载后缀++;操作人员,c++,operator-overloading,C++,Operator Overloading,重载+++函数必须以int作为参数,以区别于前缀运算符,这是某种强制规则吗 另外,在前缀重载+++函数的情况下,右操作数是如何隐式参数的 例如++ClassObj//ClassObj是rhs,但通常lhs是隐式的是。。标准中对其进行了定义 根据标准文件13.5.7增量和减量 名为operator++的用户定义函数实现前缀和后缀++运算符。如果此函数是成员 无参数的函数,或只有一个类或枚举类型参数的非成员函数,它定义 为该类型的对象添加前缀增量运算符+如果函数是具有一个参数的成员函数(其中 应为i

重载+++
函数必须以
int
作为参数,以区别于前缀运算符,这是某种强制规则吗

另外,在前缀
重载+++
函数的情况下,右操作数是如何隐式参数的


例如
++ClassObj//ClassObj是rhs,但通常lhs是隐式的

是。。标准中对其进行了定义

根据标准文件13.5.7增量和减量

名为operator++的用户定义函数实现前缀和后缀++运算符。如果此函数是成员 无参数的函数,或只有一个类或枚举类型参数的非成员函数,它定义 为该类型的对象添加前缀增量运算符+如果函数是具有一个参数的成员函数(其中 应为int型)或具有两个参数的非成员函数(第二个参数应为int型),其 为该类型的对象定义后缀增量运算符+。当由于 使用++运算符,int参数的值为零


C++需要改变函数的签名。不幸的是,
x++
++x
只有一个实参,即
x
。因此C++设计者选择了一种<代码> HACK <代码>定义一个虚拟未使用的int参数。这导致了不同的方法签名,因此C++编译器在第二个问题上区分前缀与后缀算子的方式。

< P>。前缀和后缀
++
都是一元运算符,它们没有左侧和右侧操作数,而是应用它们的单个操作数。也就是说,在
x++
++x
中,
x
是操作数,不是右手/左手,而是操作数


然后,关于为什么后缀版本的签名中需要
int
,它需要一个人工整数参数(未使用)来区分签名,并允许编译器知道您正在声明/定义后缀
++
,而不是它的前缀版本。因为它需要不同的签名,所以把它看作是一个标记,而

不是<代码>运算符++<代码>,而不是<代码>过载++/>代码>可能的副本,因为操作符是一元的,所以没有“左”和“右”的边。