我想知道为什么这个代码是正确的以及编译器如何知道首先创建一个类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;}
};
void main()
{
B b(7);
}
输出:7A B7
答案 0 :(得分:6)
这与friend
无关。
由于您尚未标记A
构造函数explicit
,因此会发生从int
到A
的隐式转换。
答案 1 :(得分:2)
编译器足够聪明,可以认为得到了一个int ....需要和A - 在这里等待构造函数。使用
答案 2 :(得分:1)
据我所知,编译器隐式调用构造函数A(因为A(int)),所以你的代码相当于:
B b(A(7));