Zmiana obiektu const
Ostatnio zmodyfikowano 2014-02-04 11:47
karaluszek Temat założony przez niniejszego użytkownika |
Zmiana obiektu const » 2014-02-02 13:07:50 Czy to prawda, że używając odpowiedniego rzutowania można zmienić obiekt stały (zadeklarowany jako const) ? |
|
alixir |
» 2014-02-02 13:21:32 Kiedyś dało się w taki sposób: #include <iostream>
int main() { const int stala = 10; int * wsk; wsk = const_cast < int *>( & stala ); std::cout << "A=" << stala << std::endl; * wsk = 20; std::cout << "A=" << stala << std::endl; return 0; } Obecnie chyba żaden kompilator na to nie zezwoli, ewentualnie zachowanie będzie niezdefiniowane. |
|
karaluszek Temat założony przez niniejszego użytkownika |
» 2014-02-02 13:30:21 Mam takie pytanie na egzaminie i co tu odpowiedzieć... |
|
alixir |
» 2014-02-02 13:35:18 Ja bym odpowiedział, że w takim przypadku zachowanie będzie niezdefiniowane. Ponadto jest to bardzo niezalecane. Aha pytanie było odnośnie C++ czy C bo to kluczowa sprawa. Dlatego, że C nie posiadał takich zabezpieczeń i dało się to obejść w podany wyżej sposób, który w C wygląda tak: #include <stdio.h>
int main() { const int stala = 10; int * wsk; wsk =( int * )( & stala ); printf( "A=%d\n", stala ); * wsk = 20; printf( "A=%d\n", stala ); return 0; }
|
|
karaluszek Temat założony przez niniejszego użytkownika |
» 2014-02-02 13:52:03 C++. Niestety jest tylko ABC.
A - nie moze byc zmieniony w zadnym wypadku. B - nie moze byc zmieniony bezposrednio. C - moze byc zmieniony przez rzutowanie. |
|
pekfos |
» 2014-02-02 13:55:54 Czy to prawda, że używając odpowiedniego rzutowania można zmienić obiekt stały (zadeklarowany jako const) ? |
Nie. W żadnym wypadku. Aha pytanie było odnośnie C++ czy C bo to kluczowa sprawa. Dlatego, że C nie posiadał takich zabezpieczeń i dało się to obejść w podany wyżej sposób, który w C wygląda tak: |
W C to też jest UB. |
|
alixir |
» 2014-02-02 13:58:29 To i tak odpowiedziałbym A. |
|
karaluszek Temat założony przez niniejszego użytkownika |
» 2014-02-02 16:17:57 A co powiecie o takim kodzie: void changeFirst( char * str, char c ) { str[ 0 ] = c; }
int main( void ) { const char name[] = "Jenny"; cout << name << endl; changeFirst( const_cast < char *>( name ), 'K' ); cout << name << endl; } |
|
« 1 » 2 |