Przy wprowadzaniu operatorów przypisania typu +=
czy *=
w większości kursów C++ stwierdza się, że ich używanie jest głównie skrótem w stosunku do korzystania ze zwykłego przypisania (=
) i odpowiednich operatorów binarnych (jak +
czy *
). Takie wyjaśnienie jest na początek zupełnie wystarczające, a przy tym łatwe do zrozumienia i co ważniejsze, wydaje się poprawne. I tak faktycznie jest – ono tylko “wydaje się” :)
Później dowiadujemy się bowiem, że sprawa jest nieco bardziej skomplikowana. Zapis typu a += b
nie musi zawsze nawet w przybliżeniu odpowiadać “wersji długiej” w postaci a = a + b
. Trzeba tu wziąć pod uwagę kilka rzeczy – głównie to, co kryje się pod nazwami a
i b
:
=
i np. +
, to nie oznacza to, że automatycznie dostajemy też przeciążony operator +=
(i vice versa). Po “skróceniu” dana instrukcja może się więc w ogóle nie skompilować. Dotyczy to oczywiście sytuacji, w których mamy do czynienia z własnymi typami danych.x = x - y + 2;
to nie jest to samo co x -= y + 2;
.Pamiętajmy więc, że operatory typu +=
są właśnie operatorami, całkowicie odrębnymi od wszystkich innych, nie zaś żadnymi skrótami, jak to się często “dla uproszczenia” mówi.
Adding comments is disabled.
Comments are disabled.