Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;friend类作为构造函数的参数_C++_Class_Friend - Fatal编程技术网

C++ c++;friend类作为构造函数的参数

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;} };

我想知道为什么这段代码是正确的,编译器如何知道首先创建类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);
}
A类
{
int a1;
公众:

A(int i){cout据我所知,编译器隐式调用构造函数A(因为A(int)),因此您的代码相当于:

bb(A(7));

编译器足够聪明,认为得到了一个int…需要和-Wait这里是构造函数。使用它

这与
朋友
无关


由于您没有标记
A
构造函数
explicit
,因此会发生从
int
A
的隐式转换。

将显式添加到(int)构造函数以防止此行为。“不需要朋友位。”它实际上是:
B(aa){可能是我的错-周日早上。忘记默认为private