c++ friend class 作为 ctor 的参数
c++ friend class as argument for ctor
我想知道这段代码如何正确以及编译器如何知道首先创建一个 class A 的对象,我认为它不应该编译,因为 B 的 ctor 请求类型 A 而不是 int
class A
{
int a1;
public:
A(int i) { cout << i << "A"<<endl;}
friend class B;
};
class B
{
public:
B(A a) {cout <<"B" <<a.a1;}
};
void main()
{
B b(7);
}
输出:7A
B7
据我所知,编译器隐式调用构造函数 A(因为 A(int)),因此您的代码等同于:
B b(A(7));
编译器足够聪明,认为得到了一个 int ....需要和 A - 这里是构造函数。使用那个
这与friend
无关。
因为您没有标记 A
构造函数 explicit
,所以会发生从 int
到 A
的隐式转换。
我想知道这段代码如何正确以及编译器如何知道首先创建一个 class A 的对象,我认为它不应该编译,因为 B 的 ctor 请求类型 A 而不是 int
class A
{
int a1;
public:
A(int i) { cout << i << "A"<<endl;}
friend class B;
};
class B
{
public:
B(A a) {cout <<"B" <<a.a1;}
};
void main()
{
B b(7);
}
输出:7A B7
据我所知,编译器隐式调用构造函数 A(因为 A(int)),因此您的代码等同于:
B b(A(7));
编译器足够聪明,认为得到了一个 int ....需要和 A - 这里是构造函数。使用那个
这与friend
无关。
因为您没有标记 A
构造函数 explicit
,所以会发生从 int
到 A
的隐式转换。