我在C++参考页面中遇到过这样的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
这是"示例"部分的摘录.代码按预期编译和运行.但是怎么可能呢?这std::reference_wrapper<int>不是默认的可构造的.你怎么能做出std::vector这些事情?我一直把它想象std::vector成一个动态阵列.但是,如何通过OS以这样的方式初始化一个新近提供给你的内存块std::list呢?
这可能听起来像一个令人困惑的问题,但由于某种原因,我无法完全理解上面代码中发生的事情.那里发生了什么?
它的工作原理是因为那里没有默认的初始化 - 列表中的元素用于复制初始化向量.
例如,以下内容不起作用:
std::vector<std::reference_wrapper<int>> v(42);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
678 次 |
| 最近记录: |