2011-03-18 10 views

risposta

6

La parola chiave const indica che il metodo non sta per modificare l'oggetto. Poiché operator== è per il confronto, non è necessario modificare nulla. Pertanto, è const. Deve essere omesso per metodi come operator= che DO modifica l'oggetto.

Permette al compilatore di ricontrollare il tuo lavoro per essere certo di non fare nulla che non dovresti fare. Per ulteriori informazioni, consulta http://www.parashift.com/c++-faq-lite/const-correctness.html.

+0

ancora una domanda stupida, il "const" in "()" è già garanzia che l'oggetto non sarà cambiato. L'ultimo "const" è duplicato? – user658266

+2

@ user658266 - 'const 'alla fine ha un significato diverso da' const' in '()'. 'const' alla fine significa che l'oggetto su cui viene chiamato il metodo non viene modificato. Mentre 'const' in'() 'significa che l'argomento ricevuto non è stato modificato. – Mahesh

+1

@ user658266: "const" in "()" garantisce che l'argomento passato come parametro (in questo caso rhs) all'operatore sovraccarico "=" non venga modificato.Il "const" alla fine della funzione indica che la funzione non cambia alcun membro dell'oggetto su cui viene chiamato. –

0

"const" alla fine di ogni dichiarazione C++ dice al compilatore che non cambierà la cosa a cui appartiene.

+0

in questo caso? – user658266

0

che segna il metodo stesso come costante, il che significa che il compilatore permetterà di utilizzare il metodo ogniqualvolta si ha un const riferimento all'oggetto pertinente. Se hai un riferimento const, altrimenti puoi solo invocare metodi che sono anche dichiarati come const.

0

Un 'const' alla fine di una dichiarazione di metodo contrassegna tale metodo come sicuro da chiamare su un oggetto costante.

2

Fare un metodo const consentirà a un oggetto contant della classe di chiamarlo. perché questo metodo non può modificare alcun membro dell'oggetto (errore del compilatore).

Potrebbe essere utile ricordare che const è una parte della firma del metodo, quindi nella stessa classe si possono avere due metodi dello stesso prototipo ma uno è const e l'altro no. In questo caso, se si chiama il metodo sovraccarico da un oggetto variabile, viene chiamato il metodo non-const e, se lo si chiama da un oggetto costante, viene chiamato il metodo const.

Tuttavia, se si dispone solo di un metodo const (non esiste un sovraccarico non costante di esso), viene chiamato sia dall'oggetto variabile che da quello costante.

Per esempio:

#include <iostream> 

using std::cout; 

class Foo 
{ 
public: 
    bool Happy; 
    Foo(): Happy(false) 
    { 
     // nothing 
    } 
    void Method() const 
    { 
     // nothing 
    } 
    void Method() 
    { 
     Happy = true; 
    } 
}; 

int main() 
{ 
    Foo A; 
    const Foo B; 
    A.Method(); 
    cout << A.Happy << '\n'; 
    B.Method(); 
    cout << B.Happy << '\n'; 
    return 0; 
} 

Will uscita:

1 
0 
Press any key to continue . . . 
Problemi correlati