令我感到惊讶的是,以下代码可以编译并运行(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
,而不能使用它的名称(正如预期的那样)?
https://stackoverflow.com/questions/13532784
复制相似问题