【问题标题】:Do std::array elements have to be reset?是否必须重置 std::array 元素?
【发布时间】:2012-08-14 20:07:00
【问题描述】:
std::array<int,4> myInts;
std::array<bool,2> myBools;

myIntsmyBools 的元素可以假定为 false 和 0,还是应该手动 fill 数组?

【问题讨论】:

    标签: c++ arrays initialization


    【解决方案1】:

    元素将被设置为随机值,但您可以确保像这样初始化它们:

    std::array<int,4> myInts{}; // all zeroes
    std::array<bool,2> myBools{}; // all false
    

    因此元素不必被重置,它们可以被初始化为某些值。您还可以将元素初始化为不同的值:

    std::array<int,4> myInts{1,2,33,44};
    std::array<bool,2> myBools{true, false};
    

    如果初始化列表中的元素少于数组的大小,则缺失的元素将被初始化为零:

    std::array<int,4> myInts{1,2}; // array contains 1,2,0,0
    

    注意 该标准指定std::array 是一个聚合,并且有一些示例代码显示它实现为具有数组数据成员。它声称这只是为了强调该类型是一个聚合,但如果使用此实现(并且 GCC 使用它),那么您将需要一组额外的大括号,因为您正在初始化 std::array 内的数组:

    std::array<int,4> myInts{ {1,2,33,44} };
    

    另一方面,这种情况符合大括号省略的条件,因此额外的大括号不是强制性的。

    【讨论】:

    • 会是一个很好的答案,不幸的是你并没有真正回答这个问题。
    • 谢谢!不知道空列表初始化。
    • @delnan 非常正确。我现在已经把它变成了答案。
    • std::array 初始化需要一对大括号 (unless you're using =)
    • @Prætorian 好吧,我仍然不是 100% 相信那个,而且标准在这个问题上似乎有点模糊。我为此添加了一条注释。
    猜你喜欢
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2019-11-21
    • 2021-12-13
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2016-08-20
    相关资源
    最近更新 更多