Mã này biên dịch trên msvc/g ++:lớp lồng nhau: Truy cập vào protected member của lớp bao quanh lớp từ một lớp bảo vệ lồng nhau
class A{
protected:
int i;
class B{
public:
A* a;
B(A* a_)
:a(a_){
}
void doSomething(){
if (a)
a->i = 0;//<---- this part
}
};
public:
A()
:i(0){
}
};
Như bạn thấy, B được quyền truy cập vào phần "bảo vệ" của bao quanh lớp, mặc dù nó không được khai báo là bạn.
Đây có phải là hành vi tiêu chuẩn (tuân thủ tiêu chuẩn) không?
Tôi thỉnh thoảng sử dụng tính năng này, nhưng tôi không nhớ quy tắc nói rằng lớp được bảo vệ lồng nhau sẽ tự động nhận được quyền truy cập vào tất cả dữ liệu được bảo vệ của lớp bao quanh.
Câu hỏi về câu hỏi. Tôi sẽ không tìm kiếm bản gốc ngay bây giờ. :) –