c++ - 列表初始化结合构造函数

标签 c++ c++11 list-initialization

我有一个布局简单的结构,类似于:

struct A
{
   int a,b;
};

我在所有地方都使用统一初始化来创建我的结构,例如:

A obj{2,3};

稍后,我为 A 添加了一个构造函数。它现在看起来像:

struct A
{
  int a,b;
  A(){}
};

这打破了统一初始化的使用。有没有一种简单的方法可以使这项工作再次进行。也许通过使用 default 关键字?

我希望有一些简单的东西来匹配我的简单结构。

最佳答案

您的简单构造函数什么都不做(甚至不初始化 ab)。如果你打算初始化它们,为什么不做类似的事情

struct A {
    int a = 0, b = 0;
};

这样,

A x;
A y { 0 };
A z { 0, 0 };

所有工作并将ab初始化为0。

如果这对您不起作用,例如你有一个更复杂的构造函数,那么你可以像这样使用委托(delegate)构造函数:

struct A {
    int a, b;

    A() : A(0, 0) { }
    A(int x) : A(x, 0) { }
    A(int x, int y) : a(x), b(y) { }
};

或者更简单

struct A {
    int a, b;

    A(int x = 0, int y = 0) : a(x), b(y) { }
};

所有这些都将在统一初始化下工作。

关于c++ - 列表初始化结合构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19915751/

相关文章:

c++ - 类之间的调用函数

c++ - 只接受指针类型参数的模板

c++ - Clang 和 GCC vs MSVC 和 ICC : Is a static_assert in the copy/move constructor required to work, 如果复制/移动省略也可以应用?

c++ - 为什么我不能大括号初始化从另一个结构派生的结构?

c++ - Braced-init-lists 和函数模板类型推导顺序

c++ - 从类模板中排除类型

c++ - 是否可以拦截来自另一个进程的控制台调用?

c++ - 为什么在列表初始化函数参数时显式构造函数不匹配?

c++ - 如何调用遍历类层次结构的成员函数

c++ - 为什么 push_back 不能重载来完成 emplace_back 的工作?