我是一名有用的助手,可以为您翻译文本。
我正在学习C++,遇到了以下奇怪的事情:
如果我按照书上的方法初始化数组
我正在学习C++,遇到了以下奇怪的事情:
如果我按照书上的方法初始化数组
int my_array[5] = {10}
每个数组字段仍然被初始化为零,但应该是十。
如果我在循环中初始化它,它就能按预期工作。
发生了什么?我正在使用Ubuntu,并使用g++编译。
你观察到的是正确的:根据标准,数组中剩余的项会被初始化为0。
std::fill_n
内部工作方式相同) - Trojan= {0}
和使用 = {}
是一样的,让编译器隐式地为你初始化第一个元素。换句话说,当使用大括号时,你明确指定的任何值都将仅初始化该字段为特定值,然后任何未指定的字段将被零初始化。因此,如果省略第一个字段,编译器将简单地为您进行零初始化。 - Remy Lebeauint
的变量发生的事情。std::fill_n
所示的函数。具体可以参考这里。std::fill_n(my_array, 5, 10); // array name, size, value
在内部,std::fill_n
等价于一个循环。来自第一个链接:
template <class OutputIterator, class Size, class T>
OutputIterator fill_n (OutputIterator first, Size n, const T& val)
{
while (n>0) {
*first = val;
++first; --n;
}
return first; // since C++11
}
my_array[0]
被初始化为10
。 - isekaijin