【发布时间】:2012-02-23 16:44:34
【问题描述】:
假设我有一个简单的结构,它包含一个向量并定义了一个复制赋值运算符,以及一个返回该结构的函数,如下所示:
struct SimpleStruct
{
vector< int > vec1;
operator=( SimpleStruct& other )
{
vec1 = other.vec1;
}
}
SimpleStruct GetStruct();
据我了解,因为我声明了复制赋值运算符,编译器不会自动为 SimpleStruct 生成移动构造函数。
所以如果我像这样使用GetStruct 函数:
SimpleStruct value = GetStruct();
当我说vec1 = other.vec1; 时,编译器是否足够聪明,可以移动而不是复制向量?或者我是否需要为 SimpleStruct 显式定义移动构造函数/赋值运算符以利用向量移动?
【问题讨论】:
-
当
other是const时,它不能移动任何东西。 -
@BoPersson 啊,没想到。为了这个问题,删除了 const。
-
澄清一下,编译器在任何情况下都不会自动生成移动构造函数或赋值运算符。如果需要移动语义,它们总是必须由开发人员提供。
-
@dauphic 你确定吗?这个问题似乎不同意:stackoverflow.com/questions/8283589/…
-
我可能是错的,我不会和 litb 争论,但我只是测试过,没有提供 POD。
标签: c++ c++11 rvalue-reference move-semantics