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

pozostałe operatory przypisania

Ostatnio zmodyfikowano 2014-05-26 11:00
Autor Wiadomość
antonio12
Temat założony przez niniejszego użytkownika
pozostałe operatory przypisania
» 2014-05-25 11:15:15
W Symfonii natknąłem się na takie pozostałe operatory przypisania:

i += 2    oznacza i = i + 2
i -= 2    oznacza i = i -2

I jest taka analogia:

"Jeśli i jest wyrażeniem, to w naszym nowym zapisie jest ono obliczane tylko jednokrotnie (w starym - dwa razy). Może to mieć znaczenie, jeśli wyrażenie to ma jakieś działanie uboczne (np. inkrementacja).

nowy zapis to ---> i += 2
stary zapis to ---> i = i + 2

Mógłby ktoś wyjaśnić to analogię na jakimś przykładzie ?
P-110813
antonio12
Temat założony przez niniejszego użytkownika
» 2014-05-25 19:48:17
nikt nie wie o co chodzi ?
P-110854
Moorfox
» 2014-05-25 19:52:20
Z jakiego roku ta Symfonia C++, bo zdaje mi się, że to nie prawda, z ciekawości zajrzałem do kodu maszynowego wygląda tak samo. Więc albo po pro stu nie wiem o co autorowi symfonii chodziło, albo masz starą wersje i uległo to zmianie, albo wyrwałeś to z kontekstu
P-110855
michal11
» 2014-05-25 20:34:12
Chodzi o ilość wywoływanych funkcji. Każdy operator to tak na prawdę funkcja.

Przy zapisie
i += 2
 jest wywoływana tylko 1 funkcja
operator +=
.

Z kolei przy zapisie
i = i + 2
 są wywoływane 2 funkcje
operator +
 i
operator =
.
P-110861
Monika90
» 2014-05-25 21:15:58
"Jeśli i jest wyrażeniem, to w naszym nowym zapisie jest ono obliczane tylko jednokrotnie (w starym - dwa razy). Może to mieć znaczenie, jeśli wyrażenie to ma jakieś działanie uboczne (np. inkrementacja).

pzypuśćmy że za i podstawiamy takie wyrażenie: tablica[f()], wtedy
zamiast i = i + 1; będzie tablica[f()] = tablica[f()] + 1;
a zmiast i += 1; będzie tablica[f()] += 1;
w pierwszym przypadki funkcja f będzie wywołana dwa razy, a w drugim tylko raz. Więc jeżeli funkcja f ma taką definicję
C/C++
int f() { std::cout << "jestem f\n"; return 5; }
to w pierwszym przypadku na ekranie bedzie dwa razy wyśwetlony tekst "jestem f", a w drugim przypadku tylko raz.

Wyrażenie tablica[f()] ma efekty uboczne, bo zawiera wywołanie funkcji, która ma efekty uboczne, w tym przypadku zapisuje coś do std::cout.
P-110871
antonio12
Temat założony przez niniejszego użytkownika
» 2014-05-26 09:28:39
ok dzięki a przydaje się to w pisaniu programów czy raczej nie ?
P-110888
DejaVu
» 2014-05-26 11:00:30
ok dzięki a przydaje się to w pisaniu programów czy raczej nie ?
Szukasz pretekstu, aby wiedzieć mniej...? :) Każde narzędzie się przydaje w większym lub mniejszym stopniu.
P-110896
« 1 »
  Strona 1 z 1