复制构造函数或=运算符?

Ada*_*gyi 7 c++

    class Foo
    {


    };

    Foo f;
    Foo g = f; // (*)
Run Code Online (Sandbox Code Playgroud)

我的问题是,在标有(*)的行中调用了什么?它是默认的复制ctr还是'='运算符?

And*_*owl 8

我的问题是,在标有(*)的行中调用了什么?它是默认的复制ctr还是'='运算符?

将调用复制构造函数.

即使=正在使用符号,这也是初始化的情况,其中左侧的对象是通过将右侧的表达式作为其构造函数的参数提供的.

特别是,这种初始化形式称为复制初始化.请注意,当初始化表达式的类型与初始化类对象的类型相同时(Foo在本例中),复制初始化基本上等同于直接初始化,即:

Foo g(f); // or even Foo g{f} in C++11
Run Code Online (Sandbox Code Playgroud)

微妙的唯一区别是,如果复制构造函数Foo被标记为explicit(很难想象为什么会出现这种情况),在复制初始化的情况下,重载解析将失败.