Jestem pewien, że poniższy kod nie powinien się kompilować. Ale w g ++ kompiluje się! Zobacz, jak kompiluje się pod numerem http://codepad.org/MR7Dsvlz.Czy rzutowanie z (wskaźnik na const) na (wskaźnik na nie stały) jest nieprawidłowe C++?
Kod:
#include <iostream>
using namespace std;
int main() {
int x = 32 ;
// note: if x is, instead, a const int, the code still compiles,
// but the output is "32".
const int * ptr1 = & x ;
*((int *)ptr1) = 64 ; // questionable cast
cout << x ; // result: "64"
}
Czy g ++ w błąd przez kompilację tego?
Jeśli chcesz odrzucić constness (i na pewno jest to dozwolone), to idiomatyczny sposób C++ to zrobić z 'const_cast (ptr1)' - chociaż obsada C też zadziała, jak właśnie widziałeś . –
To jest pomocne, aby przeczytać: http://stackoverflow.com/questions/357600/is-const-cast-safe – Pubby