Tôi chắc chắn rằng mã sau không nên biên dịch. Nhưng, trong g ++, nó biên dịch! Xem nó biên dịch tại http://codepad.org/MR7Dsvlz.Là một diễn viên từ (con trỏ đến const) đến (con trỏ đến không-const) không hợp lệ C++?
Mã:
#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"
}
là g ++ do lỗi của biên dịch này?
Nếu bạn muốn bỏ đi constness (và bạn chắc chắn nó được cho phép) cách C++ thành ngữ để làm điều đó là với 'const_cast (ptr1)' - mặc dù C cast cũng sẽ hoạt động như bạn vừa thấy . –
Điều này hữu ích khi đọc: http://stackoverflow.com/questions/357600/is-const-cast-safe – Pubby