Altro
Cosa si intende con "const" alla fine della dichiarazione di funzione?
Possibile duplicato: Significato di “const” ultimo in una dichiarazione di metodo C++?
Ho un libro, dove c'è scritto qualcosa come:
class Foo
{
public:
int Bar(int random_arg) const
{
// code
}
};
Cosa significa?
495
3
Una "funzione const", denotata con la parola chiave
const
dopo una dichiarazione di funzione, rende un errore del compilatore per questa funzione di classe cambiare una variabile membro della classe. Tuttavia, la lettura di una variabile di classe va bene all'interno della funzione, ma la scrittura all'interno di questa funzione genererà un errore del compilatore.Un altro modo di pensare a tale "funzione const" è vedere una funzione di classe come una normale funzione che prende un puntatore implicito
this
. Così un metodoint Foo::Bar(int random_arg)
(senza la const alla fine) risulta in una funzione comeint Foo_Bar(Foo* this, int random_arg)
, e una chiamata comeFoo f; f.Bar(4)
corrisponderà internamente a qualcosa comeFoo f; Foo_Bar(&f, 4)
. Ora l'aggiunta del const alla fine (int Foo::Bar(int random_arg) const
) può essere intesa come una dichiarazione con un puntatore const this:int Foo_Bar(const Foo* this, int random_arg)
. Poiché il tipo dithis
in questo caso è const, non sono possibili modifiche delle variabili membro.È possibile allentare la restrizione "const function" di non permettere alla funzione di scrivere su qualsiasi variabile di una classe. Per permettere ad alcune variabili di essere scrivibili anche quando la funzione è marcata come "const function", queste variabili di classe sono marcate con la parola chiave
mutable
. Così, se una variabile di classe è marcata come mutabile, e una "funzione const" scrive su questa variabile, allora il codice verrà compilato in modo pulito e la variabile potrà essere modificata. (C++11)Come al solito quando si ha a che fare con la parola chiave
const
, cambiare la posizione della parola chiave const in una dichiarazione C++ ha significati completamente diversi. L'uso precedente diconst
si applica solo quando si aggiungeconst
alla fine della dichiarazione di funzione dopo la parentesi.const
è un qualificatore molto abusato in C++: la sintassi e l'ordinamento spesso non sono semplici in combinazione con i puntatori. Alcune letture sulla correttezza diconst
e sulla parola chiaveconst
:Correttezza di Const
Il C++ 'const' Dichiarazione: Perché & Come
Bar
è garantito che non cambi l'oggetto su cui viene invocato. Vedi la sezione sulla correttezza delle costanti nelle FAQ del C++, per esempio.Simile a questa domanda.
In sostanza significa che il metodo
Bar
non modificherà le variabili membro non mutabili diFoo
.