以下代码:
class A
{
friend class B;
int m;
};
class B
{
friend void f(A* p) { p->m = 32; }
};
Run Code Online (Sandbox Code Playgroud)
在 clang 版本 9.0.0-2 中编译,但不在 g++ 版本 9.2.1 中编译
friend-test.cpp: In function ‘void f(A*)’:
friend-test.cpp:10:28: error: ‘int A::m’ is private within this context
10 | friend void f(A* p) { p->m = 32; }
| ^
friend-test.cpp:5:7: note: declared private here
5 | int m;
| ^
Run Code Online (Sandbox Code Playgroud)
哪个编译器是对的?
海湾合作委员会在右边。Clang 似乎有一个错误。
[班级.朋友]
10友谊既不是继承的,也不是传递的。[?例子:
Run Code Online (Sandbox Code Playgroud)class A { friend class B; int a; }; class B { friend class C; }; class C { void f(A* p) { p->a++; // error: C is not a friend of A despite being a friend of a friend } }; class D : public B { void f(A* p) { p->a++; // error: D is not a friend of A despite being derived from a friend } };?—?结束示例?]
事实f是朋友B和B又一个朋友A,并不意味着f允许访问A的私处。
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |