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,所以会发生从 intA 的隐式转换。