借助Stackoverflow,我编写了一个输出矢量和的函数。我想问:
for (auto & n : v)
?我了解for (auto ptr = v.begin(); ptr != v.end(); ptr++)
之类的代码,但是1)为什么我们通过& n
而不是n
?还有:v
是什么?谢谢!
// version 1 that works
int sumVector(vector<int> v){
int sum_of_vec = 0;
for (auto &n: v){
sum_of_vec += n;
}
return sum_of_vec;
}
// version 2 that does not work
int sumVector(vector<int> v){
int sum_of_vec; // do not specify sum_of_vec = 0
for (auto &n: v){
sum_of_vec += n;
}
return sum_of_vec;
}
(原始问题包含两个部分,可能的重复帖子并未完全涵盖其中)
答案 0 :(得分:1)
在定义没有初始化的内置类型的对象时,它将被默认初始化。但是,内置类型的默认初始化实际上没有任何作用!结果,读取未初始化的值是未定义的行为!您必须先对其进行初始化,然后才能从相应的对象读取它!
之所以出现这种奇怪的行为,是因为在两个相当重要的用例中需要用到它:
要支持这两个用例,则在未指定任何内容时,内置类型的对象将不初始化。给对象赋值很容易:只需指定一个值或 value初始化对象,例如:
int sum_of_vec{};
答案 1 :(得分:0)
第二版格式错误。变量sum_of_vec
未初始化,并且其值不确定。这可能导致不确定的行为。