两个初始化有什么区别:Foo f(); Foo f = Foo()

J.D*_*Doe 1 c++

class Foo
{
public:
    Foo(){}
private:
    Foo(const Foo &);
};

Foo f();
Foo f1 = Foo();
Run Code Online (Sandbox Code Playgroud)

我发现当我Foo(const Foo &)向私人宣布时,Foo f1 = Foo();不会编译.所以我认为Foo f1 = Foo(); 只是调用复制构造函数,但当我将我的代码更改为:

class Foo
{
public:
    Foo(){}
    Foo(const Foo &){std::cout<<"Foo(const Foo &)";}

};

Foo f();
Foo f1 = Foo();
Run Code Online (Sandbox Code Playgroud)

它没有打印任何东西.那么两个初始化有什么区别:Foo f(); Foo f = Foo()

Som*_*ude 5

由于复制省略,不必调用复制构造函数.复制构造函数必须仍然作为公共成员存在.

Foo f();声明一个名为的函数f,不带参数并按Foo值返回一个对象.

  • 在C++ 17中,不再需要复制构造函数. (4认同)