Tiêu chuẩn C ++ 11 (ISO / IEC 14882: 2011) cho biết § C.1.1
:
char* p = "abc"; // valid in C, invalid in C++
Đối với C ++, việc dùng con trỏ cho Chuỗi ký tự là có hại vì mọi nỗ lực sửa đổi đều dẫn đến sự cố. Nhưng tại sao nó có giá trị trong C?
C ++ 11 cũng nói:
char* p = (char*)"abc"; // OK: cast added
Điều đó có nghĩa là nếu một diễn viên được thêm vào câu lệnh đầu tiên thì nó trở nên hợp lệ.
Tại sao việc truyền làm cho câu lệnh thứ hai có giá trị trong C ++ và nó khác với câu lệnh thứ nhất như thế nào? Nó vẫn không gây hại sao? Nếu đúng như vậy, tại sao tiêu chuẩn lại nói rằng nó ổn?
OK
.
const
, vì vậy chúng không nhất thiết phải như vậy const
.
char[]
. Cái thứ hai là một sựconst_cast
ngụy trang.