Wątek przeniesiony 2018-07-03 09:01 z C/C++ przez kq.

Posinkremetacja – nie rozumiem działania kodu

0

Wiem, że postinkremetacja to zwiększenie wartości zmiennej PO wykorzystaniu zmiennej, ale nie rozumiem działania tego kodu:

#include <iostream>
using namespace std;

int main(int argc, char** argv) 
{

int a=10;
int y = a++;
cout << a << endl; //wyświetlona zostaje liczba 11
cout << y << endl; // wyświetlona zostaje liczba 10

	return 0;
}

Otóż: najpierw przypisuję wartość do zmiennej a, następnie mówię, że zmienna y ma być o 1 większa od a. Dlaczego zatem, gdy w konsoli wyświetlam a, wyświetlona zostaje liczba 11?? bo dlaczego przy wyświetleniu zmiennej y dlaczego wyświetla się 10 to rozumiem.

3

"Post" oznacza PO, nie PRZED. Pierw ewaluujesz a (wychodzi 10), i to ta wartość zostaje przypisana do y. Dopiero potem wartość a jest zwiększana.

Zapis a++ odnosi się wyłącznie do a i nie ma wpływu na inne zmienne, bo czemu miałby mieć?

1

wniosek - czytam od lewej?

3

W gruncie rzeczy - tak.

int y = ++a; // zwiększ wartość "a", po czym wynik (zwiększony) przypisz do zmiennej "y"

int y = a++; // wynik (wartość zmiennej "a" przed zmianą) przypisz do zmiennej "y", zwiększ wartość "a"
2

Podczas postinkrementacji tworzona jest kopia obiektu. Stąd też zalecane jest, żeby np. na iteratorach operować za pomocą preinkrementacji.

Fajnie opisane jest to tutaj: https://stackoverflow.com/questions/4445706/post-increment-and-pre-increment-concept

Tutaj jest przykład, który bardzo dobrze pokazuje o co chodzi: https://ideone.com/44R9Sx

1 użytkowników online, w tym zalogowanych: 0, gości: 1