gpt4 book ai didi

c++ - 为什么类中的 initializer_list 没有被清除为 "const std::initializer_list & li"?

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:40 24 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
initializer_list and move semantics

环境:Linux,g++-4.7

我使用 std::vector 和我自己的一个类来测试它。而且我发现在使用std::initializer_list构造一个vector的时候,其实是调用了自定义类的拷贝构造函数来制作一个临时对象。因此,我认为它真的很低效,我用“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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com