gpt4 book ai didi

c++ - 当存在其他构造函数时,如何强制创建默认序列构造函数?

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:56 26 4
gpt4 key购买 nike

从 C++11 开始,我们有了这个很棒的特性,它允许我们避免为所有小类显式创建构造函数,例如:

class A
{
public:
A() = default;
A(int x, int y) : x(x), y(y) {} // bloat
int x = 0, y = 0;
};
..
A a(1,2);

所以我们现在可以这样写:

class A
{
public:
int x = 0, y = 0;
};
..
A a{1,2}; // using the sequence constructor created by the compiler, great

问题出现了,当我还有其他我想使用的构造函数时,例如:

class A
{
public:
A() = default;
A(Deserialiser& input) : a(input.load<int>()), b(input.load<int>()) {}
int x = 0, y = 0;
};
...
A a{1, 2}; // It doesn't work now, as there is another constructor explicitly specified

问题是,我如何强制编译器创建默认序列构造函数?

最佳答案

与第二个例子的区别在于你在做 aggregate initialization .

对于第一个和第三个示例,不再可能进行聚合初始化(因为该类具有用户定义的构造函数)。

在第一个示例中,调用了双参数构造函数。对于第三个示例,找不到合适的构造函数,您将得到一个错误。


注意:在 C++11 中,第二个示例也不可能进行聚合初始化,因为 C++11 不允许内联初始化非静态成员。该限制在 C++14 中被移除。 (有关更多信息,请参阅上面的链接引用。)

关于c++ - 当存在其他构造函数时,如何强制创建默认序列构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46114223/

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