대신 기본 클래스의 기능 (좌변)의 파생 클래스에서 메서드 호출 (좌변) 함수 바인딩 (를 rvalue) : 내가 한C++ 나 C에 새로운 오전 ++ 아래로 인터페이스를 작성하려고
template <class T>
class Comparable
{
protected:
Comparable(){};
public:
virtual int compare(const T&&)=0;
int compare(const T& o)
{
return this->compare(std::move(o));
}
};
이것은 l/r 값으로 작업 할 compare 메소드를 얻으려고 시도하는 것입니다.
Monkey m1(argv[1]), m2(argv[2]);
printf("\"%s\" \"%s\" %d\n", m1.getName(), m2.getName(), m2.compare(m1));
을하지만 컴파일 오류 얻을 : 다음과 같이 main() 메소드로
class Monkey : Comparable<Monkey>
{
private:
char name[512];
public:
Monkey(const char*&& name)
{
strcpy(this->name, name);
}
const char *getName() { return name; }
int compare(const Monkey&& m)
{
return strcmp(name, m.name);
}
};
:
바인딩 할 수 없습니다 '테스트를 :: 원숭이를 나는 대등에서 다음 클래스를 파생 'lvalue to'const 테스트 :: Monkey & & ' 'virtual int '의 테스트 인수 :: Monkey :: compare (const 테스트 :: Monkey & &) ' 빌드 실패
메서드 호출이 기본 클래스의 비교 메서드에 바인딩되지 않는 이유는 무엇입니까?
내가 기본 클래스에서 가상으로 생성하고 파생 클래스에서 둘 다 작성하면 바인딩이 제대로 작동하지만 작동하지 않고 작성시 컴파일하려고하면 컴파일 오류가 발생합니다. 이리.
난 정말 당신이를 rvalue 참조를 사용하는 이유 표시되지 않습니다 어디에나. 'compare' 함수에 대한 일반적인 const-reference는 잘 작동합니다. 그리고 rvalue reference를'const char *'에 건네 주겠습니까? 그건별로 의미가 없습니다. 마지막으로 상수 값은 종종 의미가 없습니다. –
저는 C++을 처음 접했습니다. 나는 참조가 함수 호출의 기본 동작 인 복사를 방지한다고 생각하므로 사용하는 습관에 빠져 익숙해지는 것이 좋은 습관이라고 생각했습니다. 그리고 이전에 const 참조를 보았습니다. 성능에 미치는 영향은 미미할지라도. –
@JoePaul Reference는 [overhead] (http://stackoverflow.com/questions/8250932/what-is-the-overhead-of-passing-a-reference)도 소개합니다. const lvalue 레퍼런스는 당신의 경우에 perferect를 할 것입니다. rvalue 참조는 주로 완벽한 전달 및 이동 의미에 사용됩니다. – felix