可能重复:
initializer_list 和移动语义
环境:Linux,g++-4.7
我使用 std::vector 和我自己的一个类来测试它。而且我发现在使用std::initializer_list构造向量的时候,其实是调用了自定义类的拷贝构造函数来制作临时对象。因此,我认为它确实效率低下,我使用“const std::initializer_list & li”来替换它。
为什么它在 STL 库中很常见?例如:
// This is in STL: stl_vector.h
vector(initializer_list<value_type> __l, const allocator_type & __a = allocator_type())
//...
是不是真的有什么东西跳过了我的脑海?
我的测试代码如下所示:
#include <iostream>
#include <vector>
#include <initializer_list>
class Test
{
public:
Test(const Test & t) : v(t.v) {
std::cout << "Copy Cons" << std::endl;
}
Test(Test && t) : v(std::move(t.v)) {
std::cout << "MC" << std::endl;
}
Test(int val) : v(val) {}
private:
int v;
};
int main()
{
std::vector<Test> vv({Test(0), Test(1), Test(2)});
return 0;
}//main
它的输出:
Copy Cons
Copy Cons
Copy Cons