初始化所有struct成员

时间:2016-10-15 05:02:36

标签: c++ struct

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

以下是编写此类结构的典型方法:

int line = 1;
for (int i = 0; i < k; ++i)
{

    for (int j = 0; j < k-line; ++j)
    {
        printf(" ");
    }
    for (int j = 0; j < 2*i+1; ++j)
    {
        printf("*");
    }
    printf("\n");
    line++;
}

值得注意的是每个成员的类型写两次,名称四次。实际上,这意味着这种结构的代码是可压缩的。在C ++中编写这个结构有一个更短的方法吗?

3 个答案:

答案 0 :(得分:2)

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

John Brown (Esq.)

答案 1 :(得分:0)

有趣的问题。我不认为有更短的方式来编写它,特别是在大多数名称都是一个字母的地方;)

通常,C ++类型定义往往具有高度重复性。例如,您必须为所有构造函数和析构函数重复该类型的名称。不幸的是,我认为唯一的解决方案是让工具为您生成代码。

答案 2 :(得分:0)

在某些情况下,您可能会发现使用#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; } std::par<A, B>非常有用。

例如:

std::tuple<A, B, C>

在某些情况下,这可能会对你有所帮助。