簡體   English   中英

將結構的 std::vector 初始化為零

[英]Initialize a std::vector of structures to zero

我保證用該代碼初始化一個結構向量,每個元素都初始化為零?

#include <vector>

struct A {
    int a, b;
    float f;
};

int main()
{
    // 100 A's initialized to zero (a=0, b=0, f=0.0)
    // std::vector<A> my_vector(100, {}); does not compile
    std::vector<A> my_vector(100, A{});
}

簡短的回答:是的

要知道如何參考下面:當你寫

std::vector<A> my_vector(...)

如果括號為空,則進行 值初始化,如果括號非空,則進行直接初始化

並且當您編寫 A{} 時,您正在執行 列表初始化,如果大括號為空,則意味着值初始化,或者如果初始化的 object 是聚合,則表示聚合初始化

因為你的括號是非空的所以下面的代碼

std::vector<A> my_vector(100, A{});

被解釋為

std::vector<A> my_vector(/*created vector of 100 elements */ 100, /* by list  Initialization of struct with default values*/A{});

由於 A{} 在這種情況下為空,因此您正在進行值初始化,這將導致zero_initialization

  1. 作為非類類型和沒有構造函數的值初始化 class 類型的成員的值初始化序列的一部分,包括未提供初始化器的聚合元素的值初始化。

是的,因為A{}值初始化並且來自cppreference ,所以可以保證:

在以下情況下執行零初始化:

  • 作為非類類型和沒有構造函數的值初始化 class 類型的成員的值初始化序列的一部分,包括未提供初始化器的聚合元素的值初始化。

您還可以使用:

std::vector<A> my_vector(100, {0,0,0}); 

是的,您可以保證使用該代碼進行零初始化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM