std::reference_wrapper 不是默认可构造的。所以我不能写任何以下内容:

std::vector<std::reference_wrapper<int>> vec(10);
std::array<std::reference_wrapper<int>, 3> arr;

但是,令我惊讶的是,您可以调用std::vector::reserve对象 vector 的 std::reference_wrapper 成员函数并有效地更改其容量。
std::vector<std::reference_wrapper<int>> vec;
vec.reserve(10);

Live Demo

由于std::reference_wrapper没有默认构造函数,这怎么可能?

最佳答案

reserve仅分配足够的未初始化内存块以适合N单元,而不会在推送N新元素时引起重新分配。
reserve不构建任何新元素。最坏的情况是它只会移动/复制已经创建的拷贝。

09-30 15:47
查看更多