我指的是《thinking in c++》一书中提到的练习之一。 下面的代码片段会引发调用 h.play 的错误,据我所知,因为 成员我是私有(private)的。但我期待调用 me.play 时出现相同的错误。如果我评论调用 h.play 代码编译正常。为什么调用 me.play 没有报错?
class Buddy {};
template<class T> class My {
int i;
public:
void play(My<Buddy>& s) {
s.i = 3;
}
};
int main() {
My<int> h;
My<Buddy> me, bud;
h.play(bud);
me.play(bud);
}
谢谢。
[编辑] 有没有办法查看编译器为哪些代码生成了
My<int> h and
My<Buddy> me
? (任何类似于 -E 编译器标志的东西)?
最佳答案
成员对于具有相同类型的另一个对象的实例总是“公共(public)的”。
意思是My<Buddy>
实例(例如 me
)可以访问另一个 My<Buddy>
的私有(private)成员实例(例如 bud
)。
请记住 My<int>
是与 My<Buddy>
完全不同的类型,因此它无法访问这些成员。
关于c++ - 模板查询,访问私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15754198/