最佳答案
下面的代码编译并运行(vc2012 & 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
,而不能使用它的名称(正如预期的那样) ?