在 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;
}
的共同用途是std::initializer_list
作为容器(和类似)类的构造函数的参数,允许从相同类型的几个对象方便地初始化这些容器。
当然,你可以使用std::initializer_list
否则然后使用相同的{}
syntax.
自从一个std::initializer_list
具有固定的大小,不需要动态分配,因此可以有效地实现。 Astd::vector
另一方面,需要动态内存分配。即使在您的简单示例中,编译器也不可能优化此开销(避免中间std::vector
及其动态内存分配)。除此之外,你的程序的结果没有什么不同(尽管你应该采取const std::vector<int>&
避免复制及其关联的动态内存分配的参数)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)