加法运算符:+
和 -
语法
expression + expression
expression - expression
备注
相加运算符为:
加法 (+)
减法 (-)
这些二进制运算符具有从左至右的关联性。
相加运算符采用算术或指针类型的操作数。 加法 (+) 运算符的结果是操作数之和。 减法 (-) 运算符的结果是操作数之差。 如果一个操作数是指针或两个操作数都是指针,则它们必须是指向对象的指针,而不是指向函数的指针。 如果两个操作数都是指针,则结果没有意义,除非它们是指向同一数组中的对象的指针。
相加运算符采用 arithmetic、integral 和 scalar 类型的操作数。 下表定义了这些操作数。
用于相加运算符的类型
类型 | 含义 |
---|---|
算术 | 整型和浮点类型统称为“算术”类型。 |
integral | 所有大小(long、short)和枚举数的 char 和 int 类型为“整数”类型。 |
scalar | 标量操作数是算术类型或指针类型的操作数。 |
这些运算符的合法组合为:
arithmetic + arithmetic
scalar + integral
integral + scalar
arithmetic - arithmetic
scalar - scalar
请注意,加法和减法不是等效运算。
如果两个操作数都是 arithmetic 类型,则标准转换中介绍的转换适用于这两个操作数,并且结果为已转换的类型。
示例
// expre_Additive_Operators.cpp
// compile with: /EHsc
#include <iostream>
#define SIZE 5
using namespace std;
int main() {
int i = 5, j = 10;
int n[SIZE] = { 0, 1, 2, 3, 4 };
cout << "5 + 10 = " << i + j << endl
<< "5 - 10 = " << i - j << endl;
// use pointer arithmetic on array
cout << "n[3] = " << *( n + 3 ) << endl;
}
指针加法
在加法运算中,如果其中一个操作数是指向对象数组的指针,则另一个操作数必须是整型。 结果为与原始指针类型相同的指针和指向另一个数组元素的指针。 以下代码片段阐述了此概念:
short IntArray[10]; // Objects of type short occupy 2 bytes
short *pIntArray = IntArray;
for( int i = 0; i < 10; ++i )
{
*pIntArray = i;
cout << *pIntArray << "\n";
pIntArray = pIntArray + 1;
}
虽然将整数值 1 添加到 pIntArray
,但这并不表示“将 1 添加到该地址”,而是指“调整指针使其指向数组中的下一个对象”,而该对象恰好是在 2 字节(或者 sizeof( int )
)之外。
注意
在 C++ 程序中很少找到 pIntArray = pIntArray + 1
形式的代码;若要实现递增,以下形式更可取:pIntArray++
或 pIntArray += 1
。
指针减法
如果两个操作数都是指针,则减法运算的结果就是两个操作数之差(在数组元素中)。 减法表达式产生类型 ptrdiff_t
(在标准包含文件 <stddef.h> 中定义)的带符号的整数结果。
其中一个操作数可以是整型,条件是该操作数是第二操作数。 减法的结果的类型与原始指针的类型相同。 减法的值是指向第 (n - i) 个数组元素的指针,其中 n 是由原始指针指向的元素,而 i 是第二操作数的整数值。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈