我想做以下事情:
class Foo
{
Foo(int &&a, int b, std::string s="");
// does not compile because a is not an rvalue:
// Foo(int &&a, std::string s) : Foo(a, 0, s) {}
Foo(int &&a, std::string s) : Foo(std::move(a), 0, s) {} // move a
}
根据评论进行编辑
为了澄清这一点,我是新来迁移语义(也是一名业余程序员)的人,我不确定这是否是处理这种情况的好方法。
我根据注释(现已删除)添加了第一个问题,该注释表明这不是重载构造函数的正确方法。
答案 0 :(得分:1)
一般来说,这是重载构造函数的有效方法吗?
特别是将右值引用作为参数的人吗?
通常重载构造函数是有效的,即使是那些带有右值引用参数的构造函数。
尤其是您的示例格式错误。正如您在注释中指出的那样,该示例无法编译。要解决此问题,必须将一个右值传递给委派给其的构造函数。将右值引用变量转换为右值的正确方法是使用std::move
。因此,您必须做的是已经知道的事情:
我唯一看到的选择是
std::move(a)
。