A에서 B로 변환 할 때 생성자와 캐스팅 연산자를 사용하면 쉽습니다. 그러나 "중개자"가있을 때 세 번째 유형은 생성자 초기화와 함께 작동하거나 한 유형을 다른 유형과 동일시 할 때도 있지만 함수 호출에서 전달되는 매개 변수는 작동하지 않는 것 같습니다.함수를 호출 할 때 간접 형 변환이 지원되지 않습니까?
내 질문 : C++에서 지원되지 않는 것입니까, 아니면 놓친 것이 있습니까? 아래 코드에서 내 3 개의 댓글을 참조하십시오. (VS2015 업데이트 3의 컴파일러를 사용하고 있습니다.)
class StringOut
{
public:
char* ptr = nullptr;
StringOut() {}
operator char*() { return ptr; }
};
class StringIn
{
public:
char* ptr = nullptr;
StringIn() {}
StringIn(char* ptr) { StringIn::ptr = ptr; }
void operator=(char* ptr) { StringIn::ptr = ptr; }
//StringIn(StringOut& ptr) { StringIn::ptr = ptr.ptr; }
};
void ff1(StringIn strin)
{
}
void ff1(int a)
{
}
void ff()
{
StringOut strout;
StringIn strin = strout; // compiles
strin = strout; // compiles
ff1(strout); // doesn't compile
};
확실히 주석 처리 된 코드를 사용하면 작업 할 수 있습니다. 하지만 내 질문은 그것이 C++의 한계라면 이것과 같은 직접 연산자가 필요하거나 뭔가 놓치겠습니까?
확실히 컴파일러는 "컴파일하지 않습니다"라고 말했습니다. –
생성자 초기화에서 '중매인'캐스트가 작동한다고 믿는 근거는 무엇입니까? 여기에는 아무것도 나와 있지 않습니다. – EJP
'StringInstrin = strout; '과 같은 코드는 생성자 유형 초기화이며'StringInstrin (strout);과 동일합니다. – Thomas