gpt4 book ai didi

c++ - 这些在 C++ 中初始化 C 数组的方法有区别吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:37 24 4
gpt4 key购买 nike

我想将数组的所有成员初始化为零,或者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]{};
}

我知道当至少一个成员初始化为任何值时,所有其他成员都初始化为零,所以如果我这样做:

int list[4] = { 6 };

第一个成员变为 6,其余所有成员都被零初始化。但是我很困惑:

int list[4]{0};

int list[4]{};

我假设声明后没有等号的空波浪形括号是所谓的零初始化,与默认初始化相反,int list[4]{0} 也是如此,不是吗?这是否涉及幕后的 std::initializer_list?我以为这些只用于非 POD 类型,所以这里没有使用 std::initializer_list

最佳答案

Is there a difference between these ways of initialising a C array in C++?

没有。它们在语义上是等价的。

zero initialisation, as opposed to default initialisation, but so too is int list[4]{0}, isn't it?

第一个元素用零进行复制初始化。其余的元素都是值初始化的,对于 int 来说确实是零初始化。特别是在 int 的情况下,值、零和零复制初始化没有实际差异。在这种情况下,区别是语法上的。

Does this involve an std::initializer_list behind the scenes or not?

std::initializer_list 不涉及。

关于c++ - 这些在 C++ 中初始化 C 数组的方法有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47897414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com