Prefiks przyrostu i osłabienie podmiotów: ++ i--
++ unary-expression
–– unary-expression
Uwagi
Operatora prefiksu przyrostu (++) program doda do swojej operand; Ta wartość przyrostowo jest wynikiem wyrażenia.Operand musi być wartością l nie typu const.Wynik jest wartoocią l tego samego typu, jako argument.
Operator osłabienie prefiksu (—) jest analogiczne do operatora przyrostu prefiksu, z wyjątkiem, że argument jest zmniejszany o jeden, a wynik jest to wartość zmniejszany.
Po zastosowaniu operatora prefiksu w argumencie funkcji wartość argumentu nie jest gwarantowane jest zwiększane przyrostowo lub zmniejszany, przed jest przekazywany do funkcji.Patrz sekcja 1.9.17 w standardzie C++, aby uzyskać więcej informacji.
Zarówno prefiks i przyrostkowe przyrostu i osłabienie podmiotów gospodarczych wpływa na ich operandów.Najważniejsza różnica między nimi jest, gdy inkrementacja lub dekrementacja odbywa się w ocenie wyrażenia.(Aby uzyskać więcej informacji, zobacz przyrostkowe przyrostu i osłabienie podmiotów.) W formularzu prefiks inkrementacja lub dekrementacja ma miejsce, zanim zostanie użyta wartość w polu Obliczanie wyrażenia, więc wartość wyrażenia jest różne od wartości operandu.W formularzu przyrostkowe inkrementacja lub dekrementacja odbywa się po zostanie użyta wartość w polu Obliczanie wyrażenia, więc wartość wyrażenia jest taka sama jak wartość operandu.Na przykład, następujący program drukuje "++i = 6":
// expre_Increment_and_Decrement_Operators.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main() {
int i = 5;
cout << "++i = " << ++i << endl;
}
Operand integralną lub pływające typu jest zwiększane przyrostowo lub zmniejszany przez całkowitą wartość 1.Typ wyniku jest taki sam, jak typ operandu.Operand typ wskaźnika jest zwiększane przyrostowo lub zmniejszany rozmiar obiektu, który go dotyczy.Wskaźnik przyrostowo punktów do następnego obiektu; zmniejszany wskaźnik wskazuje na poprzedni obiekt.
Ponieważ operatory inkrementacji i osłabienie mieć efekty uboczne, przy użyciu wyrażeń z operatorami lub dekrementacja w makro preprocesora może mieć niepożądane wyniki.Rozważmy następujący przykład:
// expre_Increment_and_Decrement_Operators2.cpp
#define max(a,b) ((a)<(b))?(b):(a)
int main()
{
int i = 0, j = 0, k;
k = max( ++i, j );
}
Makro rozwija się do:
k = ((++i)<(j))?(j):(++i);
Jeśli i jest większa niż lub równa j lub mniej niż j 1, to jest zwiększany dwa razy.
[!UWAGA]
Funkcje wbudowane C++ są preferowane makr w wielu przypadkach, ponieważ eliminują one efekty uboczne, takich jak te opisane w tym miejscu i umożliwić języka do sprawdzania bardziej kompletny typ.
Zobacz też
Informacje
Wyrażenia z operatory jednoargumentowe
Priorytet i łączność operatorów