为了使初始化起作用,有问题的类型必须是MoveConstructible *.在您的特定情况下,提供移动构造函数将满足此要求:
Foo(Foo&&) = default;
如果这不是一个选项,您可以在默认构造函数中初始化该成员,并将其用作其他构造函数中的委托构造函数.
struct Bar { Bar() : f(1, 2) {} Bar(const FooBar&) : Bar() {} Bar(double x) : Bar() {} Foo f; };
*这并不意味着将制作副本.T t = T()
是复制省的一个容易的候选人.但是,必须可以访问可行的构造函数.
为了使初始化起作用,有问题的类型必须是MoveConstructible *.在您的特定情况下,提供移动构造函数将满足此要求:
Foo(Foo&&) = default;
如果这不是一个选项,您可以在默认构造函数中初始化该成员,并将其用作其他构造函数中的委托构造函数.
struct Bar { Bar() : f(1, 2) {} Bar(const FooBar&) : Bar() {} Bar(double x) : Bar() {} Foo f; };
*这并不意味着将制作副本.T t = T()
是复制省的一个容易的候选人.但是,必须可以访问可行的构造函数.