thể trùng lặp:
Why isn't the const qualifier working on pointer members on const objects?Tại sao C++ không thực thi const trên dữ liệu con trỏ?
Hãy xem xét các lớp sau đó có một thành viên con trỏ int *a
. Phương thức const constMod
được trình biên dịch cho phép mặc dù nó sửa đổi dữ liệu con trỏ. Tại sao trình biên dịch không làm cho dữ liệu con trỏ const trong ngữ cảnh của phương thức const? Nếu a
chỉ là một int chúng tôi sẽ không được phép sửa đổi nó trong một phương pháp const.
class ConstTest
{
public:
ConstTest(int *p): a(p) {}
void constMod() const {
++(*a);
}
int *a;
};
Tôi đang sử dụng g + + trên Linux.
câu trả lời duy nhất là "bởi vì nó như thế này", nhưng tôi nghĩ rằng hầu hết chúng ta đồng ý nó thường bất ngờ (lúc đầu), mặc dù người ta có thể tìm ra lý do sau đó. –
C++ theo mặc định cung cấp một cái gọi là bit constness - có nghĩa là nó đảm bảo rằng không có bit của đối tượng đã được thay đổi, vì vậy nó chỉ kiểm tra địa chỉ của con trỏ – rank1