Sì, si può lanciare l'oggetto da const
, chiamare la versione const
, poi gettato il risultato non const
:
return const_cast<B&>(static_cast<const A*>(this)->findB());
gettando via const
è sicuro solo quando l'oggetto in questione non è stato originariamente dichiarato const
. Dato che ci si trova in una funzione membro non-const
, è possibile sapere che questo è il caso, ma dipende dall'implementazione. Considerare:
class A {
public:
A(int value) : value(value) {}
// Safe: const int -> const int&
const int& get() const {
return value;
}
// Clearly unsafe: const int -> int&
int& get() {
return const_cast<int&>(static_cast<const A*>(this)->get());
}
private:
const int value;
};
In generale, le funzioni del mio membro sono brevi, quindi la ripetizione è tollerabile. A volte è possibile considerare l'implementazione in una funzione membro modello privata e chiamarla da entrambe le versioni.
fonte
2012-12-06 19:26:12
Ti sembra riferimenti molto. –
Nessun punto nell'utilizzo di puntatori o copie se non necessario – dchhetri