C++中的自增运算符

有些C++的书上说,++x是「先加后用」,x++ 是「先用后加」。这是错误的。

++x 与 x++ 都是先加后用。区别是 ++x 是先加后用新数据,x++ 是先加后用旧数据

比如说 y = ++x;等同于

x = x + 1;  // 先加
y = x;   // 后用新数据

y = x++; 等同于

temp = x; // 保存一个副本
x = x + 1; // 先加
y = temp;  // 后用旧数据

出处:

C++之父 Bjarne Stroustrup 的名著《The C++ Programming Language》第4版第276页。
明确指出 y=x++ 等同于 y = (t=x, x = x + 1, t)

The C++ Programming Language 第4版 第276页

C++98标准(最早的C++标准)第5.2.6条,明确指出:后置的 ++ 运算符,是取得「原始数据的副本」(a copy of the original value)。
C++98标准

C++20标准(最新的C++标准)第7.6.1.6条,明确指出:后置的 ++ 运算符,是取得「原始数据的副本」(a copy of the original value)。
C++20标准

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++自增运算符可以被重载为成员函数或全局函数。自增运算符的重载函数必须返回一个,通常是一个引用,以允许连续调用该运算符。 下面是一个示例,演示如何重载自增运算符 ++ 作为成员函数: ```cpp class Number { public: Number(int value = 0) : m_value(value) {} Number& operator++() { m_value++; return *this; } int getValue() const { return m_value; } private: int m_value; }; int main() { Number n(5); ++n; cout << n.getValue() << endl; // 输出 6 return 0; } ``` 在上面的示例,Number 类重载了自增运算符 ++ 作为成员函数。重载函数使用前缀形式,即 ++n。它将 m_value 成员变量递增一次,然后返回 *this 的引用,允许连续调用该运算符。 下面是一个示例,演示如何重载自增运算符 ++ 作为全局函数: ```cpp class Number { public: Number(int value = 0) : m_value(value) {} friend Number& operator++(Number& num) { num.m_value++; return num; } int getValue() const { return m_value; } private: int m_value; }; int main() { Number n(5); ++n; cout << n.getValue() << endl; // 输出 6 return 0; } ``` 在上面的示例,Number 类重载了自增运算符 ++ 作为全局函数。重载函数使用前缀形式,即 ++n。它将 Number 对象的 m_value 成员变量递增一次,然后返回 Number 对象的引用,允许连续调用该运算符。注意,这里使用了 friend 关键字,以便访问 Number 类的私有成员变量 m_value。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值