gpt4 book ai didi

c++ - 如何构造非默认可构造对象的 std::vector ?

转载 作者:太空狗 更新时间:2023-10-29 19:58:44 26 4
gpt4 key购买 nike

我从 C++ reference page 中遇到了这样的代码:

#include <algorithm>
#include <list>
#include <vector>
#include <functional>

int main()
{
std::list<int> l = {-4, -3, -2, -1, 0, 1, 2, 3, 4};
std::vector<std::reference_wrapper<int>> v(l.begin(), l.end());
return 0;
}

这是“示例”部分的片段。代码按预期编译和运行。但这怎么可能呢? std::reference_wrapper<int>不是默认可构造的。你怎么能做一个std::vector那些东西?我一直在想象std::vector作为动态数组。但是你怎么能以这种方式从 std::list 初始化操作系统新提供给你的内存块呢? ?

这听起来像是一个令人困惑的问题,但出于某种原因,我无法完全理解上面代码中发生的事情。里面发生了什么?

最佳答案

之所以有效,是因为那里没有默认初始化 - 列表中的元素用于复制初始化 vector 。

例如,以下内容将不起作用:

std::vector<std::reference_wrapper<int>> v(42);

关于c++ - 如何构造非默认可构造对象的 std::vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18382879/

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