【发布时间】:2015-01-03 09:30:58
【问题描述】:
在 C++11 中,可以使用初始化列表来初始化函数中的参数。它的目的是什么?不能用 const 向量做同样的事情吗?下面这两个程序有什么区别?
使用初始化列表:
#include <iostream>
using namespace std;
int sumL(initializer_list<int> l){
int sum = 0;
for (const auto i: l){
sum += i;
}
return sum;
}
int main(){
cout << sumL({1, 2, 3}) << "\n";
return 0;
}
使用 const 向量:
#include <iostream>
#include <vector>
using namespace std;
int sumV(const vector<int> l){
int sum = 0;
for (const auto i: l){
sum += i;
}
return sum;
}
int main(){
cout << sumV({1, 2, 3}) << "\n";
return 0;
}
【问题讨论】:
-
第二个代码需要的比需要的多(向量也是用 initializer_list 构造的)
-
Offtopic:请注意,您制作了向量的副本,即,您没有使用引用 &。在 for 循环中也是如此,现在它只是一个 int 但对于较大的对象,引用将避免复制向量中的每个对象。
标签: c++ c++11 vector initialization initializer-list