【发布时间】:2018-11-17 17:57:36
【问题描述】:
我想做如下的事情:
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
}
- 一般来说,这是重载构造函数的有效方法吗?
- 特别是一个将右值引用作为参数的?
基于 cmets 编辑
澄清一下,我是移动语义的新手(也是一名业余程序员),我只是不确定这是否是处理这种情况的好方法。
我根据评论(现已删除)添加了第一个问题,该评论表明这不是重载构造函数的正确方法。
【问题讨论】:
-
你为什么不想使用
std::move? “更好”是什么意思? -
如果编译成功,默认参数会使调用哪个构造函数不明确。
-
您已经认识到
std::move是正确的做法。 -
感谢您的 cmets。我已经相应地编辑了这个问题。 @Ripi2 我会看看是什么。
标签: c++ move-semantics rvalue-reference constructor-overloading stdmove