【发布时间】:2015-10-18 11:43:48
【问题描述】:
请帮助我理解为什么类成员函数可以返回私有嵌套类对象,以及为什么可以在该私有嵌套类上调用成员函数,例如:
class Y
{
class X
{
public:
void f() { cout << "Hello World" << endl; }
};
public:
X g() { return X(); }
};
void h()
{
Y::X x; // Error, as expected: class Y::X is private.
x.f(); // Error.
Y y; // OK.
y.g().f(); // OK. But why???
}
我用 GCC 和 Visual C++ 进行了测试,最后一行在两者上都可以编译。我似乎在 C++ 标准中找不到任何可以使它有效的东西。任何想法为什么这有效?
编辑:
另一个观察:
void i()
{
Y y;
Y::X x2 = y.g(); // Error: class Y::X is private
x2.f(); // Error
auto x3 = y.g(); // OK
x3.f(); // OK
}
【问题讨论】:
-
这两个函数都是
public,而你实际上并没有在任何地方使用X。 -
X的定义是私有的,而函数g()是公共的。所以完全没有问题。
标签: c++