Do czego służy ten const?

0

Mam taki przeciążony operator + klasy NODE_COORD:

 
NODE_COORD NODE_COORD::operator + (const NODE_COORD &prawy) const

Nie zamieszczam ciała funkcji, bo jest to standardowa funckja przeciążająca klase NODE_COORD, która ma reprezentować punkt (x,y,z). Moje pytanie dotyczy natomiast tego dość dziwnie (jak dla mnie) zamieszczonego słowa const - tego na samym końcu. Rozumiem, że ten const w nawiasie dotyczy prawego operandu, którego funkcja ma nie zmieniać. Czyli zatem ten const na końcu dotyczy lewego operandu? Jesli tak, to czemu jest umieszczony właśnie tam, na samym końcu, jakby bez niczego wcześniej.

3

Ten const informuje, że owa metoda klasy nie może zmieniać nic w tej klasie oprócz pól zadeklarowanych jako mutable.
http://ideone.com/XQ7FdB

0

to czemu jest umieszczony właśnie tam
bo taka jest składnia języka C++

na samym końcu, jakby bez niczego wcześniej
skoro na samym końcu, to chyba znaczy że ze wszystkim wcześniej..?

5

Taki const powoduje, że this dla klasy X w obrębie takiej metody widoczny jest jako const X* [9.3.2(1)]. W skrócie oznacza to, że nie możesz modyfikować obiektu na rzecz, którego zawołałeś tę metodę (chyba, że modyfikowane pole jest mutable).
Konstruktory oraz destruktory nie powinny być deklarowane jako const [9.3.2(4)] (Z drugiej strony mogą istnieć konstruktory constexpr [7.1.5(2)]).
Aktualnie taki const jest trochę wadliwy, bo nie propaguje const dla wskaźników (można bez problemu wywołać z const metody non-const metodę na pointerze). W C++17 ma wejść poprawka dla tego przypadku w postaci std::propagate_const. Więcej na ten temat znajdziesz tutaj: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4388.html http://en.cppreference.com/w/cpp/experimental/propagate_const

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