为什么我可以在私人类型上使用汽车?

为什么我可以在私人类型上使用汽车?

我对下面的代码编译和运行(vc 2012&gcc4.7.2)感到惊讶。

class Foo {
    struct Bar { int i; };public:
    Bar Baz() { return Bar(); }};int main() {
    Foo f;
    // Foo::Bar b = f.Baz();  // error
    auto b = f.Baz();         // ok
    std::cout << b.i;}

这段代码编译得很好是正确的吗?为什么这是正确的?为什么我可以用auto在私有类型上,而我不能使用它的名称(如预期的那样)?


千万里不及你
浏览 439回答 1
1回答

哆啦的时光机

访问控制应用于人名..与标准中的示例相比:class&nbsp;A&nbsp;{ &nbsp;&nbsp;class&nbsp;B&nbsp;{&nbsp;};public: &nbsp;&nbsp;typedef&nbsp;B&nbsp;BB;};void&nbsp;f()&nbsp;{ &nbsp;&nbsp;A::BB&nbsp;x;&nbsp;//&nbsp;OK,&nbsp;typedef&nbsp;name&nbsp;A::BB&nbsp;is&nbsp;public &nbsp;&nbsp;A::B&nbsp;y;&nbsp;//&nbsp;access&nbsp;error,&nbsp;A::B&nbsp;is&nbsp;private}
打开App,查看更多内容
随时随地看视频慕课网APP