Deklaracja funkcji członka z const
w końcu to, że funkcja pozwala na miano nawet na obiekcie const
. Ma to sens tylko dla funkcji składowych, które nie modyfikują stanu obiektu.
Załóżmy, że klasa, która powoduje przeciążenie tych operatorów, nazywa się X
. Przypuszczalnie zachowuje się trochę jak pojemnik, dając dostęp do elementów, które zawiera przez to operator[]
.
Teraz powiedzmy, że użytkownik chce użyć const X
:
const X x = /* fill it */;
use(x[0]);
Jeżeli użytkownik móc to zrobić? Prawdopodobnie. Jeśli chcą mieć niezmienny pojemnik, pozwól mu go mieć. Jeśli nie dostarczysz wersji , nie będą mogli tego zrobić. W końcu nie próbują modyfikować kontenera, tylko patrzą na jego zawartość.
Dlaczego warto teraz odwołać się do wersji const
z numerem referencyjnym ? Ponieważ musi. Zwraca referencję do członka samej klasy. Jeżeli pojemnik był const
i wrócił niebędącą const
odniesienia, rozmówca będzie mógł modyfikować swoje wewnętrzne tylko za pomocą tego operatora:
const X x = /* fill it */;
x[0].modify();
Och, możemy zmodyfikować stan x
mimo to const
. To byłoby złe, a kompilator nawet nie pozwoli ci tego zrobić.
możliwy duplikat [co oznacza const w C++ w różnych miejscach] (http://stackoverflow.com/questions/10482455/what-does-const-mean-in-c-in-different-places) – juanchopanza