c ++中的朋友功能

时间:2018-03-22 19:29:04

标签: c++

为什么我们总是说友元函数不是成员函数,即使它们是在类中声明的? 我在许多书籍和互联网上找到了,但我没有得到适当的解释。

3 个答案:

答案 0 :(得分:1)

friend (C++)

  

如果您声明之前未声明的朋友函数,   该函数被导出到封闭的非类范围。

答案 1 :(得分:0)

In [class.mfct] C ++标准说(或者在C ++ 11时代说过。此时此链接已经过时了)

  

在类的定义中声明的函数(不包括使用friend说明符([class.friend])声明的函数)称为该类的成员函数。

我很难在后来的标准草案中找到类似的措辞。

那就是说,我认为这一点是不言而喻的。

[class.friend] states:

  

类的朋友是一个函数或类,它被授予使用类中的私有和受保护成员名称的权限。类通过朋友声明指定其朋友(如果有的话)。这些声明给予朋友特殊的访问权限,但他们不会成为朋友级别的指定朋友。

friend是类之外的类,它已被类授予该类的受保护和私有成员的访问权限。这意味着friend本身不是成员。

另请注意,friend函数不必在类中实现。宣言就足够了。

答案 2 :(得分:0)

从概念上讲,成员函数的类型为Ret(Class::*)(Args...),在类的实例上调用:instance.member_function(),并且可以通过this访问被调用的实例。朋友功能不适合"会员功能"。该函数在单独的作用域中定义,而不是在类中定义,即使它看起来类似于成员函数声明。