C++ 友元函数的限制
根据我所指的文本(Herbert Schildt的完整引用),派生类不继承友元函数,友元函数可能没有 存储类说明符。也就是说,它们不能声明为静态或外部。为什么? 派生类不继承友元函数?[…]为什么 因为这将破坏封装:派生类无法再控制它的朋友,因此它无法有效地控制谁有权访问它的内部 它们不能声明为静态或外部,为什么 因为C++ 友元函数的限制,c++,friend,C++,Friend,根据我所指的文本(Herbert Schildt的完整引用),派生类不继承友元函数,友元函数可能没有 存储类说明符。也就是说,它们不能声明为静态或外部。为什么? 派生类不继承友元函数?[…]为什么 因为这将破坏封装:派生类无法再控制它的朋友,因此它无法有效地控制谁有权访问它的内部 它们不能声明为静态或外部,为什么 因为static没有意义(它只在属于类的函数中有意义,friends是自由函数,extern将再次违反封装,因为类不再有效地控制哪个函数可以访问它:因为是extern,这个朋友实际上可
static
没有意义(它只在属于类的函数中有意义,friend
s是自由函数,extern
将再次违反封装,因为类不再有效地控制哪个函数可以访问它:因为是extern
,这个朋友实际上可能来自不同的编译单元,这个类不知道
请参阅简的答案以获得更正
static
或extern
,因为它不是函数签名的一部分,所以不需要指定函数。我相信函数本身的声明(在类之外)可以包含以下两种内容扔掉这本书,买一本新的。Herb Schildt的书是因为他们的技术错误。对不起,这个答案的第二部分是完全错误的<代码>静态对自由函数(使它们成为编译单元的本地函数)有意义,并且每个不包含关键字
静态
的自由函数声明都隐式包含外部
。类也不与编译单元相关联。朋友可以有效地来自任何编译单元,无论它是否“不同”,都无法定义。