Аддитивные операторы: +
и -
Синтаксис
expression + expression
expression - expression
Замечания
Ниже перечислены аддитивные операторы.
сложения (+);
вычитания (-).
Эти бинарные операторы имеют ассоциативность слева направо.
Аддитивные операторы принимают операнды арифметических типов или типов указателей. Результатом оператора добавления (+) является сумма операндов. Результатом оператора вычитания (-) является разница между операндами. Если один или оба операнда являются указателями, они должны быть указателями на объекты, а не на функции. Когда оба операнда являются указателями, результаты имеют смысл только в том случае, если оба операнда указывают на объекты в одном массиве.
Аддитивные операторы принимают операнды арифметических, целочисленных и скалярных типов. Они описаны в следующей таблице.
Типы, используемые с аддитивными операторами
Тип | Значение |
---|---|
Арифметические | Целочисленные типы и типы с плавающей запятой собирательно называются "арифметическими" типами. |
Интеграл | Типы char и int всех размеров (long, short), а также перечисления называются "целочисленными типами". |
Скалярные | Скалярные операнды — это операнды арифметического типа или типа указателя. |
Допускаются следующие сочетания этих операторов:
арифметический арифметический +
скалярный + целочисленный
целочисленный + скалярный
арифметический арифметический -
скалярный скаляр -
Обратите внимание, что сложение и вычитание не являются эквивалентными операциями.
Если оба операнда имеют арифметический тип, преобразования, описанные в стандартных преобразованиях , применяются к операндам, а результатом является преобразованный тип.
Пример
// 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 )
).
Примечание.
Код формы pIntArray = pIntArray + 1
редко можно найти в программах на C++; чтобы выполнить пошаговое увеличение, предпочтительно использовать следующие формы: pIntArray++
или pIntArray += 1
.
Вычитание указателей
Если оба операнда являются указателями, то результатом вычитания будет число элементов массива, находящихся между операндами. Выражение вычитания дает подписанный целочисленный результат типа ptrdiff_t
(определенный в стандартном формате stddef.h><).
Второй операнд может иметь целочисленное значение. Результат вычитания имеет тот же тип, что и исходный указатель. Значение вычитания — это указатель на элемент массива (n - i)th, где n является элементом, на который указывает исходный указатель, и я является целочисленным значением второго операнда.
См. также
Выражения с бинарными операторами
Операторы C++, приоритет и ассоциативность
Аддитивные операторы в C
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по