Operatory dodawania: + i -

Składnia

expression + expression
expression - expression

Uwagi

Operatory dodawania to:

  • Dodawanie (+)

  • Odejmowanie (-)

Te operatory dwuargumentowe mają łączność od lewej do prawej.

Operatory dodawania przyjmują operandy typów arytmetycznych lub wskaźników. Wynikiem operatora dodawania (+) jest suma operandów. Wynikiem operatora odejmowania (-) jest różnica między operandami. Jeśli jeden lub oba operandy są wskaźnikami, muszą być wskaźnikami do obiektów, a nie do funkcji. Jeśli oba operandy są wskaźnikami, wyniki nie są znaczące, chyba że oba są wskaźnikami do obiektów w tej samej tablicy.

Operatory addytywne przyjmują operandy arytmetycznych, całkowitych i skalarnych typów. Są one zdefiniowane w poniższej tabeli.

Typy używane z operatorami dodawania

Typ Znaczenie
Arytmetyczne Typy całkowite i zmiennoprzecinkowe są zbiorczo nazywane typami "arytmetycznymi".
Integralną Typy char i int wszystkich rozmiarów (długich, krótkich) i wyliczenia są typami "całkowitymi".
Wartość skalarna Operandy skalarne to operandy typu arytmetycznego lub wskaźnika.

Kombinacje prawne dla tych operatorów to:

arytmetyczne arytmetyczne +

całka skalarna +

skalarny całkowitoliczbowy +

arytmetyczne arytmetyczne -

skalarny - skalarny

Należy pamiętać, że dodawanie i odejmowanie nie są równoważnymi operacjami.

Jeśli oba operandy są typu arytmetycznego, konwersje objęte konwersjami standardowymi są stosowane do operandów , a wynikiem jest przekonwertowany typ.

Przykład

// 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;
}

Dodawanie wskaźnika

Jeśli jeden z operandów w operacji dodawania jest wskaźnikiem do tablicy obiektów, drugi musi być typu całkowitego. Wynik jest wskaźnikiem, który jest tego samego typu co oryginalny wskaźnik i wskazuje inny element tablicy. Poniższy fragment kodu ilustruje tę koncepcję:

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;
}

Mimo że wartość całkowita 1 jest dodawana do pIntArrayelementu , nie oznacza "dodania wartości 1 do adresu", a raczej oznacza "dostosowanie wskaźnika w celu wskazania na następny obiekt w tablicy", który ma być 2 bajty (lub sizeof( int )) z dala.

Uwaga

Kod formularza pIntArray = pIntArray + 1 rzadko występuje w programach języka C++. Aby wykonać przyrost, preferowane są następujące formularze: pIntArray++ lub pIntArray += 1.

Odejmowanie wskaźnika

Jeśli oba operandy są wskaźnikami, wynikiem odejmowania jest różnica (w elementach tablicy) między operandami. Wyrażenie odejmowania zwraca podpisany całkowity wynik typu ptrdiff_t (zdefiniowany w standardowym pliku <include stddef.h>).

Jeden z operandów może być typu całkowitego, o ile jest drugim operandem. Wynik odejmowania jest tego samego typu co oryginalny wskaźnik. Wartość odejmowania jest wskaźnikiem do elementu tablicy (n - )th, gdzie n jest elementem wskazywanym przez oryginalny wskaźnik i jest integralną wartością drugiego operandu.

Zobacz też

Wyrażenia z operatorami dwuargumentowymi
Wbudowane operatory, pierwszeństwo i kojarzenie języka C++
Operatory dodawania języka C