Do czego służy rzutowanie const_cast ?
Ostatnio zmodyfikowano 2014-11-28 22:35
wilkoo13 Temat założony przez niniejszego użytkownika |
Do czego służy rzutowanie const_cast ? » 2014-11-28 21:51:18 W mojej książce pisze: jeżeli potrzebna jest konwersja z typu oznaczonego modyfikatorami const lub volatile do typu nonconst lub nonvolatile należy użyć słowa kluczowego const_cast. int main() { const int i = 0; int * j =( int * ) & i; j = const_cast < int *>( & i ); volatile int k = 0; int * u = const_cast < int *>( & k ); }
Nie rozumiem wgl tego kodu powyżej. Po co taka zabawa z adresami, i ze wskaźnikami? Nie lepiej jest pprst: const int n = 5; int a = 6; a = n
Do czego wgl służy to rzutowanie? |
|
Monika90 |
» 2014-11-28 22:35:00 Powiedzmy, że masz funkcję która przyjmuje wskaźnik do czegośtam i wiemy (z dokumentacji) że ta funkcja nie modyfikuje obiektu do którego odnosi się wskaźnik, lecz niestety autor tej funkcji nie znał C++ i nie wiedział że powinien użyć const. Np.: void open_file( char * file_name );
A ty piszesz taką funkcję void f( const std::string & file_name ) { }
i chcesz w niej wywołać open_file, jak to zrobić? To jest jedno zastosowanie const_cast. Inne zastosowanie - masz klasę która ma dwie wersje funkcji składowej, jedną z atrybutem const, a drugą bez (jak operator [] w std::vector), wtedy możesz użyć const_cast żeby zaimplementować jedną z wersji przy pomocy drugiej i uniknąć duplikacji kodu. Przykład: class Container { const int & operator []( int i ) const { } int & operator []( int i ) { return const_cast < int &>(( * const_cast < const Container *>( this ) )[ i ] ); } };
Z pewnością są i inne zastosowania, ale niech to ci wystarczy, na razie. |
|
« 1 » |