更新:看来这是我的错,我没有正确安装CTP。 MS无法重现该错误。
我想将一个变量从派生类移到我的基类(它们之间有多个类)
通常,我会通过const&传递参数,但我试图按值传递它并将其向下移动到层次结构中,从而避免复制。
以下是我的课程:
#include <string>
class base {
public:
explicit base(std::string url) : url_{std::move(url)} {}
// prevent copy
base(const base&) = delete;
base& operator=(const base&) = delete;
virtual ~base() {}
protected:
std::string url_;
};
class derived : public base {
public:
using base::base;
};
class derived_final : public derived {
public:
using derived::derived;
explicit derived_final(std::string url) :
derived{std::move(url)}
{
// do some stuff
}
};
int main() {
derived_final df { "test" };
}
和日志:
e:\project\test\main.cpp(25) : error C2664: 'derived::derived(const derived &)': cannot convert argument 1 from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'const derived &'
Reason: cannot convert from 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'const derived'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
我还尝试将移动构造函数添加到基础,以及op =。
但是当我尝试将url移动到derived_final的构造函数中派生时,derived_final尝试使用派生的复制构造函数和std :: string作为参数。
为什么会发生这种情况? 我正在使用带有CTP的msvc 2013(用于“使用”支持)。
来源:https://bitbucket.org/syl/c-11-inherited-constructor-and-move/src
答案 0 :(得分:0)
似乎是一个MSVC错误。 GCC报告没有错误。