Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

zagadka - postinkrementacja

Ostatnio zmodyfikowano 2018-04-03 00:43
Autor Wiadomość
aksen
Temat założony przez niniejszego użytkownika
zagadka - postinkrementacja
» 2018-04-02 22:24:45
C/C++
#include<iostream>

int main()
{
    int x = 1;
   
    // nr1
    x = x++;
    std::cout << x << std::endl;
   
    x = x++ + x;
   
    // nr2
    std::cout << x << std::endl;
    return 0;
}


proste pytanie:

dlaczego w  przypadku nr1 na konsoli dostajemy 1, a w przypadku nr2 już 3 (a nie 2)?
P-170418
Monika90
» 2018-04-02 22:40:18
Twój program ma błąd składni, bo zapomniałeś napisać int przed main.
P-170419
pekfos
» 2018-04-02 22:44:19
P-170420
YooSy
» 2018-04-02 22:45:57
dlaczego w  przypadku nr1 na konsoli dostajemy 1
Równie dobrze może to być dwa.

edit: Jak podrzucił @pekfos.
P-170422
Monika90
» 2018-04-02 22:52:30
C/C++
int x = 1;
x = x++;
std::cout << x << std::endl;
Wg mnie to powinno wypisać 1. Natomiast to drugie ma niezdefiniowane zachowanie.

P-170423
YooSy
» 2018-04-02 23:20:45
Wg mnie to powinno wypisać 1
Powinno, a nie wszędzie tak robi. VS wypisuje 2, a gcc wypisuje 1.
P-170425
pekfos
» 2018-04-02 23:27:06
W postinkrementacji, inkrementacja jest po (sequenced after) obliczeniu wartości. W przypisaniu, przypisanie jest po obliczeniu wartości operandów. Nie jest określone, czy inkrementacja ma zajść przed, czy po przypisaniu.
P-170427
Monika90
» 2018-04-03 00:03:01
Wg przykładu w standardzie powinno być 1

i = i++ + 1;                  // the value of i is incremented
http://eel.is/c++draft​/basic.exec#intro.execution-10
P-170429
« 1 » 2
  Strona 1 z 2 Następna strona