2014-09-03 2 views
5

CL 인스턴스를 const int&으로 모호하게 변환하는 이유는 무엇입니까?참조로 모호한 변환

struct CL 
{ 
    operator const int&() 
    { 
    } 
    operator int&() 
    { 
    } 
}; 

void fnc(const int&) 
{ 
} 

int main() 
{ 
    CL cl; 
    fnc(cl); 
} 

두 가지 방법이 있습니다 :
1). cl.operator const int&()은 사용자 정의 변환
2)로 연결됩니다. cl.operator int&()은 사용자 정의 변환으로 이어지고 자격 변환 (int& ~ const int&)

첫 번째 방법은 두 번째 방법보다 낫지 않습니까? 표준을 보았지만 아무 것도 발견하지 못했습니다.

답변

5

이 두 가지 변환이이 문맥에서 적용 가능 (동일하게 양호)하기 때문입니다. 즉, int&const int&은 모두 const int&에 바인딩 될 수 있습니다.

당신이 있다면 변환은 모호하지 않을 것이다 :

void fnc(int&) 
{ 
}