【发布时间】:2015-04-20 20:21:25
【问题描述】:
为什么下面会编译?
vector<int> vec;
auto lambda = [ vec (move(vec)) ]() { //??
};
如何使用 vec (move(vec)) 重新初始化已分配的 vec 变量?这不调用移动构造函数吗?
如果我写:
vector<int> vec;
vec (move(vec));
这是无效的
【问题讨论】:
-
在 msvc2013 中你不能这样做。你用什么编译器?
-
(当两个编译器在标准代码上说不同的东西时,几乎总是 MSVC 是错误的,而 GCC 是正确的)
-
vec(move(vec))等价于vec.operator()(move(vec))。可能您的意思是移动构造:vector<int> v2(move(vec));或移动分配:v2 = move(vec)? -
@myaut 它在我写的最后一个 sn-p 中,它是第一个移动构造(根据我从答案中得到的)