Increment/decrement operators
递增/递减运算符是一元运算符,可将变量的值增加/减少1。
它们可以具有后缀形式:
表达式
++
|
|||||||||
表达式
--
|
|||||||||
同样地,前缀形式:
++
表达式
|
|||||||||
--
表达式
|
|||||||||
前缀与后缀自增或自减操作的操作数
expr
必须是
可修改左值
,其类型为
整型
(包括
_Bool
和枚举类型)、实浮点类型或指针类型。该操作数可以具有 cvr 限定符、无限定符或为
原子类型
。
后缀递增和递减运算符的结果是 expr 的值。
前缀递增运算符的结果是将值
1
与
expr
的值相加:表达式
++
e
等价于
e
+
=
1
。前缀递减运算符的结果是从
expr
的值中减去
1
:表达式
--
e
等价于
e
-
=
1
。
递增运算符会引发向操作数添加适当类型的值
1
的副作用。递减运算符会引发从操作数减去适当类型的值
1
的副作用。与所有其他副作用一样,这些操作会在下一个
序列点
之前或之时完成。
int a = 1; int b = a++; // 将1+a(即2)存储到a // 返回a的旧值(即1) // 执行后,b == 1 且 a == 2 a = 1; int c = ++a; // 将1+a(即2)存储到a // 返回1+a(即2) // 执行后,c == 2 且 a == 2
|
对任何 原子变量 进行后置递增或后置递减操作,都是具有 memory_order_seq_cst 内存顺序的原子读-修改-写操作。 |
(since C11) |
请参阅 算术运算符 了解指针算术的限制,以及应用于操作数的隐式转换规则。
目录 |
注释
由于涉及副作用,必须谨慎使用递增和递减运算符,以避免因违反 顺序规则 而导致未定义行为。
递增/递减运算符未为复数或虚数类型定义:通常加减实数1的定义对虚数类型没有影响,而若使其对虚数加减
i
、对复数加减
1
,则会导致处理
0+yi
与
yi
时产生差异。
与C++(以及某些C语言实现)不同,自增/自减表达式本身永远不会是左值: & ++ a 是无效的。
示例
#include <stdio.h> #include <stdlib.h> int main(void) { int a = 1; int b = 1; printf("原始值: a == %d, b == %d\n", a, b); printf("后缀运算符结果: a++ == %d, b-- == %d\n", a++, b--); printf("应用后缀运算符后: a == %d, b == %d\n", a, b); printf("\n"); // 重置 a 和 b a = 1; b = 1; printf("原始值: a == %d, b == %d\n", a, b); printf("前缀运算符结果: ++a == %d, --b == %d\n", ++a, --b); printf("应用前缀运算符后: a == %d, b == %d\n", a, b); }
输出:
原始值: a == 1, b == 1 后缀运算符结果: a++ == 1, b-- == 1 应用后缀运算符后: a == 2, b == 0 原始值: a == 1, b == 1 前缀运算符结果: ++a == 2, --b == 0 应用前缀运算符后: a == 2, b == 0
参考文献
- C23 标准 (ISO/IEC 9899:2024):
-
- 6.5.2.4 后缀递增和递减运算符 (p: TBD)
-
- 6.5.3.1 前缀递增和递减运算符 (p: TBD)
- C17 标准 (ISO/IEC 9899:2018):
-
- 6.5.2.4 后缀递增和递减运算符 (p: TBD)
-
- 6.5.3.1 前缀递增和递减运算符 (p: TBD)
- C11 标准 (ISO/IEC 9899:2011):
-
- 6.5.2.4 后缀递增和递减运算符 (p: 85)
-
- 6.5.3.1 前缀递增和递减运算符 (p: 88)
- C99标准(ISO/IEC 9899:1999):
-
- 6.5.2.4 后缀递增和递减运算符(页码:75)
-
- 6.5.3.1 前缀递增和递减运算符(页码:78)
- C89/C90 标准 (ISO/IEC 9899:1990):
-
- 3.3.2.4 后缀递增与递减运算符
-
- 3.3.3.1 前缀递增与递减运算符
参见
| 常用运算符 | ||||||
|---|---|---|---|---|---|---|
| 赋值 |
自增
自减 |
算术 | 逻辑 | 比较 |
成员
访问 |
其他 |
|
a
=
b
|
++
a
|
+
a
|
!
a
|
a
==
b
|
a
[
b
]
|
a
(
...
)
|
|
C++ 文档
关于
自增/自减运算符
|