Bí danh công khai cho loại không công khai


12

Tôi tự hỏi nếu nó là C ++ hợp lệ:

class Test {
    struct PrivateInner {
        PrivateInner(std::string const &str) {
            std::cout << str << "\n";
        }
    };

public:
    using PublicInner = PrivateInner;
};

//Test::PrivateInner priv("Hello world");        // Ok, private so we can't use that
Test::PublicInner publ("Hello World");           // ?, by using public alias we can access private type, is it ok ?

1
Tại sao mã không hợp lệ?
NathanOliver

Câu trả lời:


14

Các loại không công khai cũng không riêng tư. Kiểm soát truy cập chỉ áp dụng cho tên . Vì PublicInnerlà một tên công khai đề cập đến PrivateInnerlớp, nó có thể được sử dụng bên ngoài Testlớp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.