C++中的友元声明-公共和私有之间的区别
Friend declaration in C++ - difference between public and private
将友元函数/类声明为private或public有区别吗?我似乎在网上找不到任何关于这件事的信息。
我指的是之间的区别
class A
{
public:
friend class B;
};
和
class A
{
private: //or nothing as the default is private
friend class B;
};
有区别吗?
不,没有区别——你只知道类B是类a的朋友,现在可以访问其私有和受保护的成员,仅此而已。
由于语法friend class B
没有声明类A
的成员,所以无论在哪里编写,类B
都是类A
的朋友。
此外,如果在A
的protected
部分中写入friend class B
,则并不意味着B
只能访问A
的protected
和public
成员。
永远记住,一旦B
成为A
的朋友,它就可以访问A
的任何成员,无论您在哪个部分编写friend class B
。
c++有"隐藏的朋友"的概念:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1601r0.pdf
这只适用于内联定义的友元函数。这使得函数只能通过依赖于参数的查找找到,并将它们从封闭的命名空间中删除。
友元声明出现在类主体中,并将函数或其他类访问权限授予友元声明所在类的私有和受保护成员。
因此,访问说明符对友元声明的含义没有影响(它们可以出现在private:或public:部分,没有区别)。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- & 和 * 之间的区别
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- S() 与 S{} 之间的区别?