C++:使构造函数的行为类似于默认初始化列表构造函数

问题描述 投票:0回答:1

我写了以下玩具示例

#include <iostream>

using namespace std;

struct A {
    A() { cerr << "default" << endl; }
    A(const A &a) { cerr << "copy" << endl; }
    A(A &&a) { cerr << "move" << endl; }
};

struct B {
    A a;
};

struct C {
    A a;
    C(A a): a(a) {}
};

int main() {
    B b {A()};
    cerr << "=======" << endl;
    C c {A()};
    return 0;
}

编译并运行它给出:

default
=======
default
copy

我们可以看到

C
的构造函数创建了一个副本,而
B
的构造不需要副本。

我无法通过在 struct

B
中定义我自己的构造函数来重现
C
的行为。例如,将
C(A a): a(a) {}
替换为
C(A a): a(forward<A>(a)) {}
会创建一个移动。

有没有办法创建一个模仿

B
默认构造函数行为的构造函数?

c++ constructor default-constructor
1个回答
0
投票

您可能想要:

struct C {
    A a;
    C(A const &a): a(a) {}
};
© www.soinside.com 2019 - 2024. All rights reserved.