初始化所有结构成员

Initialize all struct members

本文关键字:成员 结构 初始化      更新时间:2023-10-16

这个问题涉及任何c++的普通数据定义,其中有一个构造函数将所有数据成员作为参数并对其进行初始化。使用这种扩展过的初始化列表的唯一原因是为了防止只指定部分结构的错误。

下面是编写这种结构的典型方法:
struct Struct {
    A a;
    B b;
    C c;
    Struct(A a, B b, C c) : a(a) , b(b), c(c) {}
};

值得注意的是,每个成员的类型写了两次,名称写了四次。实际上,这意味着这些结构体的代码是相当可压缩的。在c++中是否有更短的方法来编写这个结构?

如果你的结构体不包含任何指针,你可以在c++ 11中使用聚合初始化器。

#include <iostream>
using namespace std;
struct xxx {
    int a, b, c;
};
int main() {
    // your code goes here
    xxx x{1,2,3};
    cout << x.a << x.b << x.c;
    return 0;
}

有趣的问题。我认为没有更短的写法了,尤其是在这里,大多数名字都是一个字母;)

一般来说,c++类型定义倾向于高度重复。例如,必须重复所有构造函数和析构函数的类型名称。不幸的是,我认为唯一的解决方案是让工具为您生成代码。

在某些情况下,您可能会发现使用std::par<A, B>std::tuple<A, B, C>很有用。

例如:

std::tuple<A, B, C> t = std::make_tuple(a, b, c);