我正在调试一些与此基本相同的代码:
<Window>
<Window.DataContext>
<ViewModel />
</Window.DataContext>
<ListView x:Name="ActionFile"
ItemsSource="{Binding FileActionEntries}" >
<ListView.View>
<GridView>
<GridViewColumn Header="Number" Width="40" DisplayMemberBinding="{Binding NumberX}"/>
<GridViewColumn Header="Action" Width="200" DisplayMemberBinding="{Binding ActionX}"/>
<GridViewColumn Header="File" Width="350" DisplayMemberBinding="{Binding FileX}"/>
</GridView>
</ListView.View>
</ListView>
</Window>
当我创建struct Foo { int a; int b; };
struct Bar { Bar() {} Foo foo{0}; };
的实例时,似乎Bar
和a
都被初始化为零。这样可以保证吗?在规范中哪里可以找到?
答案 0 :(得分:3)
如果初始化程序子句的数量少于成员的数量(和基数(自C ++ 17起)]或初始化程序列表完全为空,则初始化剩余的成员[和基数(自C ++ 17起)] [由默认的成员初始化程序(如果在类定义中提供,否则,从C ++ 14开始)]由空列表按照常规的列表初始化规则(对非类类型和非类类型执行值初始化) -带有默认构造函数的类,以及对聚合的聚合初始化)。如果引用类型的成员是其余成员之一,则该程序的格式不正确。
Foo
没有默认的成员初始值设定项(int b{0};
),因此b
将通过带有空列表的列表初始化来初始化,这意味着非类类型的值初始化: b = int() // = 0
。