parameter - member function c++ const




Cosa si intende con "const" alla fine della dichiarazione di funzione? (4)

Considera due variabili tipizzate in classe:

class Boo { ... };

Boo b0;       // mutable object
const Boo b1; // non-mutable object

Ora puoi chiamare qualsiasi funzione membro di Boo su b0 , ma solo funzioni membro con qualifica costante su b1 .

Possibile duplicato:
Significato di "const" ultimo in una dichiarazione del metodo C ++?

Ciao ho un libro, dove c'è scritto qualcosa come:

class Foo 
{
public:
    int Bar(int random_arg) const
    {
        // code
    }
};

Inoltre, una domanda by-the-way: perché dovrei / non dovrei usare const prima delle dichiarazioni degli argomenti? Cosa cambia?

int Foo (const int Bar) { /* code */ }

EDIT: Quindi se lo faccio ora:

Foo v1, v2;

La funzione di barra (codificata) sarà presente 3 volte o 1 volta in memoria?



Trovo sempre concettualmente più facile pensare che stai facendo questo punt const (che è praticamente quello che fa).


Una "funzione const", denotata con la parola chiave const dopo una dichiarazione di funzione, rende un errore del compilatore per questa funzione di classe modificare una variabile membro della classe. Tuttavia, la lettura di una variabile di classe è ok 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" è la visualizzazione di una funzione di classe come una funzione normale che prende implicitamente this puntatore. Quindi un metodo int Foo::Bar(int random_arg) (senza il const alla fine) risulta in una funzione come int Foo_Bar(Foo* this, int random_arg) , e una chiamata come Foo f; f.Bar(4) Foo f; f.Bar(4) corrisponderà internamente a qualcosa come Foo f; Foo_Bar(&f, 4) Foo f; Foo_Bar(&f, 4) . Ora aggiungendo il const alla fine ( int Foo::Bar(int random_arg) const ) può quindi essere compreso come dichiarazione con un const questo puntatore: int Foo_Bar(const Foo* this, int random_arg) . Poiché il tipo di this in questo caso è const, non sono possibili modifiche delle variabili membro.

È possibile allentare la restrizione della "funzione const" per non consentire alla funzione di scrivere su qualsiasi variabile di una classe. Per consentire ad alcune variabili di essere modificabili anche quando la funzione è contrassegnata come "funzione const", queste variabili di classe sono contrassegnate con la parola chiave mutable . Pertanto, se una variabile di classe è contrassegnata come mutabile e una "funzione const" scrive su questa variabile, il codice verrà compilato in modo pulito e la variabile è possibile modificare. (C ++ 11)

Come al solito quando si ha a che fare con la parola chiave const , la modifica della posizione della parola chiave const in un'istruzione C ++ ha significati completamente diversi. L'uso sopra di const si applica solo quando si aggiunge const alla fine della dichiarazione di funzione dopo la parentesi. const è un qualificatore altamente utilizzato in C ++ e la sintassi e l'ordinamento spesso non sono semplici in combinazione con i puntatori. Alcune letture sulla correttezza const e la parola chiave const :

Const correctness

La dichiarazione "const" del C ++: Why & How





const