C++语法——自增运算符"++"重载
重载的前缀自增运算符和后缀自增运算符有什么区别?
自增运算符"++"重载
C++ 是如何判断一个operator++
函数是前缀自增运算符还是后缀自增运算符?
根据operator++(),()
括号中的参数确定的。如果不填参数,就是前缀运算符;如果填入一个虚拟参数(如int),那就是后缀运算符。是前缀还是后缀和返回值类型是否是引用无关。
前缀自增运算符一定是返回原对象修改后的引用,而后缀自增运算符一定是返回拷贝对象吗?
不是强制要求,这是一种通用的约定——前缀自增运算符返回原对象修改后的引用,后缀自增运算符返回新的拷贝对象。
前缀自增运算符和后缀自增运算符在用法上有什么区别?
在约定的条件下:
前缀自增运算符 (++obj)
使用前缀自增运算符时,你会直接修改原始对象,并且可以在同一语句中使用递增后的值
例子:
MyNumber a(5);
MyNumber b = ++a; // 先递增a,然后将递增后的值赋给b
后缀自增运算符 (obj++)
使用后缀自增运算符时,你会在同一语句中使用原始值,然后再进行递增。
例子:
MyNumber a(5);
MyNumber b = a++; // 先保存a的原始值到b,然后再递增a
其它
通常,前缀递增运算符 (++obj)
更常见,因为它更直观并且可以提供更好的性能。