gpt4 book ai didi

c++ - 两次初始化: Foo f(); Foo f = Foo()有什么区别

转载 作者:行者123 更新时间:2023-11-30 00:44:04 30 4
gpt4 key购买 nike

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

Foo f();
Foo f1 = Foo();

我发现当我将 Foo(const Foo &) 声明为私有(private)时,Foo f1 = Foo(); 不编译。所以我认为 Foo f1 = Foo();只是调用复制构造函数,但是当我将代码更改为:

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

};

Foo f();
Foo f1 = Foo();

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

最佳答案

由于copy elision不必调用复制构造函数。不过,复制构造函数必须仍然作为公共(public)成员存在。

并且 Foo f(); 声明了一个名为 f函数,不带任何参数并返回一个 Foo按值对象。

关于c++ - 两次初始化: Foo f(); Foo f = Foo()有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51035704/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com