为什么我们总是说友元函数不是成员函数,即使它们是在类中声明的? 我在许多书籍和互联网上找到了,但我没有得到适当的解释。
答案 0 :(得分:1)
如果您声明之前未声明的朋友函数, 该函数被导出到封闭的非类范围。
答案 1 :(得分:0)
In [class.mfct] C ++标准说(或者在C ++ 11时代说过。此时此链接已经过时了)
在类的定义中声明的函数(不包括使用
friend
说明符([class.friend])声明的函数)称为该类的成员函数。
我很难在后来的标准草案中找到类似的措辞。
那就是说,我认为这一点是不言而喻的。
类的朋友是一个函数或类,它被授予使用类中的私有和受保护成员名称的权限。类通过朋友声明指定其朋友(如果有的话)。这些声明给予朋友特殊的访问权限,但他们不会成为朋友级别的指定朋友。
friend
是类之外的类,它已被类授予该类的受保护和私有成员的访问权限。这意味着friend
本身不是成员。
另请注意,friend
函数不必在类中实现。宣言就足够了。
答案 2 :(得分:0)
从概念上讲,成员函数的类型为Ret(Class::*)(Args...)
,在类的实例上调用:instance.member_function()
,并且可以通过this
访问被调用的实例。朋友功能不适合"会员功能"。该函数在单独的作用域中定义,而不是在类中定义,即使它看起来类似于成员函数声明。