【发布时间】:2014-09-30 16:43:33
【问题描述】:
我最近遇到了一段 c++ 代码,其中一个类成为了自己的朋友。正如我在不同的论坛上读到的那样,一个班级已经是自己的朋友。所以我想知道是否有一个特定的原因可以明确地让自己成为班级朋友。
另一个问题是,让班级成为自己的朋友的原因是什么?
也许有很多经验的人可以澄清这个话题。
这是代码示例,以说明我的问题:
template < typename T>
class Foo: public T
{
protected:
template < typename U>
friend class Foo;
}
【问题讨论】:
-
你能给我们看看代码吗?我看不出有什么目的(类已经可以访问它自己的私有/受保护成员,无需自欺欺人)。
-
我能想到的唯一原因是 1) 你不想花时间在代码生成器中的特殊情况上,所以它会出现在生成的代码中,或者 2) 过时的代码重构留下的,没有人注意到,因为编译器没有抱怨。
-
“我在不同的论坛上看到一个班级已经是它自己的朋友了。”这是错误的。
-
它不是自己的朋友。
Foo的任何模板实例化都将成为任何其他模板的朋友。关键的细节是类模板不是类型。 -
@AlexandraC:因为类是它自己的朋友这根本不是真的。您一直在阅读的这些论坛可能试图将友谊关系与访问班级的
private成员混为一谈,虽然建立友谊关系确实会授予这种访问权限,但这并不意味着班级是自己的朋友。
标签: c++ friend access-control