list-initialization与构造函数组合

mir*_*irk 1 c++ c++11 list-initialization

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

struct A
{
   int a,b;
};
Run Code Online (Sandbox Code Playgroud)

我已经在整个地方使用统一初始化来创建我的结构,如:

A obj{2,3};
Run Code Online (Sandbox Code Playgroud)

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

struct A
{
  int a,b;
  A(){}
};
Run Code Online (Sandbox Code Playgroud)

这打破了统一初始化的使用.有没有一种简单的方法可以让这项工作重新开始.也许通过使用默认关键字?

我希望有一些简单的东西,以匹配我的简单结构.

Jay*_*Jay 5

你简单的构造确实什么都没有(甚至没有初始化ab).如果你想初始化它们,为什么不做类似的事情

struct A {
    int a = 0, b = 0;
};
Run Code Online (Sandbox Code Playgroud)

那样,

A x;
A y { 0 };
A z { 0, 0 };
Run Code Online (Sandbox Code Playgroud)

所有的工作和初始化ab为0.

如果这对你不起作用,因为你有一个更复杂的构造函数,那么你可以使用这样的委托构造函数:

struct A {
    int a, b;

    A() : A(0, 0) { }
    A(int x) : A(x, 0) { }
    A(int x, int y) : a(x), b(y) { }
};
Run Code Online (Sandbox Code Playgroud)

或者更简单

struct A {
    int a, b;

    A(int x = 0, int y = 0) : a(x), b(y) { }
};
Run Code Online (Sandbox Code Playgroud)

所有这些都适用于统一初始化.