首页  >  文章  >  后端开发  >  如何使用初始化列表初始化 C 成员数组?

如何使用初始化列表初始化 C 成员数组?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-04 05:41:02739浏览

How to Initialize a C   Member Array with an Initializer List?

使用 Initializer_list 初始化 C 0x 成员数组时出现赋值错误

尝试使用初始值设定项列表初始化成员数组时,遇到编译器错误:赋值中的类型不兼容'std::initializer_list' 到 'const int [2]'。

使用可变参数模板构造函数的解决方案

您可以选择可变参数,而不是初始化列表构造函数模板构造函数:

<code class="cpp">struct Foo {
    int x[2];
    template <typename... Ts>
    Foo(Ts... ts) : x{ts...} {}
};</code>

使用这种方法,您可以按如下方式初始化 Foo 对象:

<code class="cpp">Foo f1(1, 2);     // OK
Foo f2{1, 2};     // Also OK
Foo f3(42);      // OK; x[1] zero-initialized
Foo f4(1, 2, 3); // Error: too many initializers</code>

使用非常量成员数组并在函数体中初始化的解决方案

如果恒定性不是必需的,您可以在跳过构造函数中的初始化后在函数体内初始化数组:

<code class="cpp">struct Foo {
    int x[2]; // or std::array<int, 2> x;
    Foo(std::initializer_list<int> il) {
       std::copy(il.begin(), il.end(), x);
       // or std::copy(il.begin(), il.end(), x.begin());
       // or x.fill(il.begin());
    }
}</code>

但是,此方法缺少可变参数模板提供的编译时边界检查构造函数。

以上是如何使用初始化列表初始化 C 成员数组?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn