C++中关于类型转换的问题
阿神
阿神 2017-04-17 15:25:18
0
2
454

C++ Primer上说,

struct B;
struct A{
         A()=default;
         A(const B&);
};
struct B{
         operator A() const;
}
A f(const A&);
B b;
A a=f(b);//二义性错误
A a1=f(b.operator A());//正确
A a2=f(A(b));//正确

我们无法使用强制类型转换来解决二义性问题,因为强制类型转换本身也面临二义性,这句话到底是什么意思啊?这不是通过强制类型转换实现了功能吗?

阿神
阿神

闭关修行中......

모든 응답(2)
阿神

이 문장은 정확히 무슨 뜻인가요?

이 문장의 의미는 다음과 같습니다. (f(b) 호출 시 모호성이 있습니다.) 이 모호성은 강제 유형 변환(f(static_cast<A>(b)) 또는 f((A)b))을 사용해도 제거될 수 없습니다. 원래 문장은 다음과 같습니다.

캐스트를 사용하여 모호성을 해결할 수는 없습니다.
캐스트 자체도 동일한 모호성을 갖게 됩니다.


이 기능은 강제 형 변환을 통해 구현된 것 아닌가요?

아니요, 예제의 두 가지 올바른 호출 중 어느 것도 캐스트를 사용하지 않습니다. 첫 번째 호출은 B의 변환 함수를 명시적으로 호출하여 모호성을 제거하고, 두 번째 호출은 B의 변환 함수를 명시적으로 호출하여 모호성을 제거합니다.

간단히 말하면 여기서 캐스트 유형 변환을 사용하면 캐스트 자체에 실행 가능한 변환 시퀀스가 ​​필요하기 때문에 호출의 모호성을 제거할 수 없지만 변환 생성자 및 실행 가능한 변환 시퀀스를 통해 각각 두 개를 얻을 수 있습니다. 둘 사이에는 우열(?)이 없습니다.


관련 없음:
그러나 여기에 실제 모호성이 있는지 여부는 의심스러워 보입니다.

黄舟

C 에서는 강제 변환 방법을 지정하지 않는다는 의미입니다. A의 생성자나 B의 오버로드 중 하나를 선택할 수 있습니다. 어느 것을 선택하고 구현하는 방법은 IDE 자체에서 결정됩니다. IDE 버전마다 구현 방식이 다릅니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿