Zeb*_*ish 6 c++ initialization array-initialization c++11
我想初始化数组的所有成员为零,或 nullptr
struct Window{ int a;};
int main()
{
Window* list[4] = { 0, 0, 0, 0 };
Window* list2[4] = {0};
Window* list3[4] = {};
Window* list4[4]{ 0, 0, 0, 0 };
Window* list5[4]{0};
Window* list6[4]{};
}
Run Code Online (Sandbox Code Playgroud)
据我所知,当将至少一个成员初始化为任何值时,所有其他成员都初始化为零,所以如果我这样做:
int list[4] = { 6 };
Run Code Online (Sandbox Code Playgroud)
第一个成员变为6,所有其余成员都是零初始化.我很困惑:
int list[4]{0};
Run Code Online (Sandbox Code Playgroud)
和
int list[4]{};
Run Code Online (Sandbox Code Playgroud)
我假设在没有等号的声明之后的空的波浪形括号是所谓的零初始化,而不是默认初始化,但也是如此int list[4]{0},不是吗?这是否涉及std::initializer_list到幕后?我以为这些只用于非POD类型,所以std::initializer_list这里没有使用?
在 C++ 中初始化 C 数组的这些方法有区别吗?
不,它们在语义上是等效的。
零初始化,与默认初始化相反,但 int list[4]{0} 也是如此,不是吗?
第一个元素被复制初始化为零。其余元素均已进行值初始化,这实际上int是零初始化。在特殊情况下,值、零和带有零的复制初始化没有任何实际差异int。在这种情况下,区别在于语法。
这是否涉及幕后的 std::initializer_list ?
std::initializer_list不参与。
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |