은의이 코드 보자 : 나는 믿고C++ : 대 변환 생성자 우선 순위 대 할당 연산자 캐스트 연산자
Test1 t1;
Test2 t2;
t1 = t2;
가에 t1 = t2
- 를 구현하는 방법을 세 가지 방법이다 (이상?)
Test1
- 에 과부하 할당 연산자는
Test1(const Test2&)
을 만들Test2
- 에 타입 캐스트 연산자를 오버로드 내 GCC 테스트에 따르면 변환 생성자는
이 사용하는 것의 우선 순위 :
- 할당 연산자
- 변환 생성자와 타입 캐스트 연산자 (모호한)
- const를 변환 생성자 const 유형 캐스트 연산자 (모호함)
이 우선 순위를 이해하는 데 도움을 주시기 바랍니다.
t1.operator=(t2);
지금 오버로드 확인의 일반적인 규칙이 적용
나는 테스트를위한 코드 (사용해 몇 줄의 주석)
struct Test2;
struct Test1 {
Test1() { }
Test1(const Test2& t) { puts("const constructor wins"); }
// Test1(Test2& t) { puts("constructor wins"); }
// Test1& operator=(Test2& t) { puts("assign wins"); }
};
struct Test2 {
Test2() { }
// operator Test1() const { puts("const cast wins"); return Test1(); }
// operator Test1() { puts("cast wins"); return Test1(); }
};
int main() {
Test1 t1;
Test2 t2;
t1 = t2;
return 0;
}
'Test1 :: Test1 (const Test2 &)'는 "복사 생성자"가 아니며 "변환 생성자"입니다. – aschepler
이 게시물은 변환 연산자가 더 높은 우선 순위를 갖는 이유를 정확히 설명합니다. http://stackoverflow.com/questions/1384007/conversion-constructor-vs-conversion-operator-precedence –