[英]Value-initializing std::array member?
假設我有一個包含std::array
成員的類模板:
template<typename T>
class C {
public:
C();
private:
std::array<T, 42> a;
};
我如何定義C::C
以便a
始終是值初始化的(不是默認初始化的)? 即,使得構造函數調用T()
到的每一個元素初始化a
-而,例如,如果T
是int
,那么每一個元件a
被保證是零而不是靜不定值?
int main() {
C<int> c;
assert(c.a[13] == 0); // ignoring private for exposition
}
更新
給后代的額外信息:
std::array
是具有單個元素T[N]
的聚合類型std::array
是聚合初始化T[N]
是從一個空的初始化列表復制初始化的。 它也是一個聚合,因此 2 和 3 遞歸應用。T[N]
的 N 個元素中的每一個都從一個空的 init-list 中復制初始化。[dcl.init.list]/3
使用空的 init-list 進行復制列表初始化。 到達該鏈的最后一個條款,內容如下:否則,如果初始化列表沒有元素,則對象是值初始化的。
瞧。 用空的 init 列表{}
初始化std::array
會導致其元素被值初始化。
您可以使用內聯成員初始化:
private:
std::array<T, 42> a{};
如果你絕對想用構造函數來代替(為什么?)那么:
C()
: a{}
{ }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.