Jestem zdezorientowany z tymi dwoma. Jestem świadomy referencji C++, które są z natury stałe i po ustawieniu nie można ich zmienić, aby odnosić się do czegoś innego.Jaka jest różnica między "const int & jj" i "int & const jj"?
Odpowiedz
const int&
oznacza odniesienie do stałej int
. (Podobnie int&
oznacza odniesienie do const int
).
int& const
dosłownie const odniesienia (na const int
), który jest nieważny C++, bo sam w sobie odniesienia nie może być kwalifikowana const.
Cv wykwalifikowanych odniesienia są odpowiednio uformowane z wyjątkiem gdy CV kwalifikatory są wprowadzane przez zastosowanie typedef nazwy ([dcl.typedef] [temp.param]) lub specyfikator decltype ([dcl.type.simple]), w którym to przypadku kwalifikatory cv są ignorowane.
Jak już wspomniano, odniesienia są z natury stałe i po ich ustawieniu nie można ich zmienić, aby odnosić się do czegoś innego. (Nie możemy ponownie powiązać referencji po jej inicjalizacji.) Oznacza to, że referencja jest zawsze "const", wtedy referencja const-qualified lub odwołanie bez wartości stałej może w rzeczywistości nie mieć sensu.
const
Kwalifikator zastosowany do odniesienia oznacza, że nie można zmienić wartości odniesienia. Na przykład:
void foo(int& arg) {
arg = 1; // OK. The value passed by a caller will be changed in-place.
}
void foo(const int& arg) {
arg = 1; // Compilation error.
}
int& const jj
to błąd kompilacji.
Różnica:
const int& jj// means a reference to const int.
int& const jj // ill formed code that should trigger a compiler error
Czy Twój kompilator zaakceptować 2nd wariant? – juanchopanza
Proszę określić, który kompilator zaakceptował dla ciebie drugi wariant. – Angew
@HumamHelfawi To wcale nie jest duplikat. To pytanie dotyczy "const int" i "int const", obydwu poprawnych (i równoważnych) formularzy. Ten zajmuje się 'const int &' i błędem składni 'int & const'. – Angew