C++ c++;friend类作为构造函数的参数
我想知道为什么这段代码是正确的,编译器如何知道首先创建类A的obj,我认为它不应该编译,因为B的ctor请求的是类型A而不是int的参数C++ c++;friend类作为构造函数的参数,c++,class,friend,C++,Class,Friend,我想知道为什么这段代码是正确的,编译器如何知道首先创建类A的obj,我认为它不应该编译,因为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;} };
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);
}
A类
{
int a1;
公众:
A(int i){cout据我所知,编译器隐式调用构造函数A(因为A(int)),因此您的代码相当于:
bb(A(7));
编译器足够聪明,认为得到了一个int…需要和-Wait这里是构造函数。使用它这与朋友
无关
由于您没有标记A
构造函数explicit
,因此会发生从int
到A
的隐式转换。将显式添加到(int)构造函数以防止此行为。“不需要朋友位。”它实际上是:B(aa){可能是我的错-周日早上。忘记默认为private