相关疑难解决方法(0)

复制初始化和直接初始化之间有区别吗?

假设我有这个功能:

void my_test()
{
    A a1 = A_factory_func();
    A a2(A_factory_func());

    double b1 = 0.5;
    double b2(0.5);

    A c1;
    A c2 = A();
    A c3(A());
}
Run Code Online (Sandbox Code Playgroud)

在每个分组中,这些陈述是否相同?或者在某些初始化中是否有额外的(可能是可优化的)副本?

我见过有人说过这两件事.请引用文字作为证据.还请添加其他案例.

c++ initialization

230
推荐指数
5
解决办法
5万
查看次数

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

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()

c++

1
推荐指数
1
解决办法
104
查看次数

标签 统计

c++ ×2

initialization ×1