为什么我可以在私人类型上使用汽车?我对下面的代码编译和运行(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在私有类型上,而我不能使用它的名称(如预期的那样)?
1 回答
哆啦的时光机
TA贡献1779条经验 获得超6个赞
class A { class B { };public: typedef B BB;};void f() { A::BB x; // OK, typedef name A::BB is public A::B y; // access error, A::B is private}
- 1 回答
- 0 关注
- 438 浏览
添加回答
举报
0/150
提交
取消