업데이트 : 내 잘못 인 것 같습니다. 올바르게 CTP를 설치하지 않았습니다. MS는 버그를 재현하지 못했습니다.상속 된 생성자 (사용) 및 이동
나는 보통, 내가 const를 &으로 인수를 전달할 것입니다 (이 그들 사이에 여러 클래스가 있습니다),하지만 난에 노력하고있어 내 기본 클래스에 파생 클래스에서 변수를 이동하려는
값으로 전달하고 계층 구조 아래로 이동하여 복사본을 피하십시오. = 연산으로 aswell,
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
가 나는 또한 기지로 이동 생성자를 추가하는 시도 :
#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" };
}
및 로그 : 여기
내 클래스입니다.그러나 derived_final은 derived_final의 생성자에서 파생 된 URL을 이동하려고하면 매개 변수로 std :: string을 사용하여 파생 된 복사 생성자를 사용하려고 시도합니다.
왜 이런 생각입니까? CTP에 msvc 2013을 사용하고 있습니다 ("지원"사용). 여기
소스 : https://bitbucket.org/syl/c-11-inherited-constructor-and-move/src
'main()'도 포함 할 수 있습니까? 나는 uniform-init'derived_final df { "test"}; 때문에 잘못된 카피 - ctor 메시지를 보내지 않았기 때문에 물어 본다. 그리고 내가 왜 그 args에 대한 rval-refs를 사용하지 않는지 완전히 명확하지 않습니다. – WhozCraig
'derived :: derived;를 사용하여'explicit derived_final (std :: string url)'을 정의하는 것뿐만 아니라'derived_final'에서 2 개의 ctors를 똑같은 서명으로 만들지는 않습니다. ? 아직이 기능을 사용하지 않았습니다 – David
게시물을 전체 목록과 오류 메시지로 업데이트했습니다. "explicit"을 제거하려고 시도했지만 여전히 동일한 오류가 발생합니다. @WhozCraig 또한 rvalue 생성자를 추가하려고 시도했지만 여전히 동일한 오류가 발생했습니다. 여전히 VS2013에 (const 파생 된 &) – Syl