> 백엔드 개발 > C++ > 컴파일러가 변환 연산자의 유형을 대체하지 않는 이유는 무엇입니까?

컴파일러가 변환 연산자의 유형을 대체하지 않는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-15 20:32:02
원래의
552명이 탐색했습니다.

Why Doesn't the Compiler Substitute Type in Conversion Operators?

C의 변환 연산자 이해

다음 코드 조각을 고려하세요.

C에서 변환 연산자는 다음과 같습니다. 유형 변환에서 중요한 역할을 합니다. 그렇다면 어떻게 작동하나요?

1. 인수 전달 중 변환:

복사 초기화 규칙에 따라 인수 전달 중에 변환 연산자가 고려됩니다. 변환이 참조인지 여부에 관계없이 소스 유형을 호환 가능한 유형으로 변환합니다.

2. 참조로 변환:

변환된 유형이 lvalue인 경우 조건 연산자에서 참조로의 변환이 허용됩니다. 또한 참조를 직접 바인딩하는 경우 참조로의 변환이 필요할 수도 있습니다.

3. 함수 포인터로 변환:

함수 호출 시 함수 포인터 또는 참조로의 사용자 정의 변환이 사용됩니다.

4. 클래스가 아닌 유형으로의 변환:

부울로의 변환과 같은 암시적 변환은 사용자 정의 변환 함수를 사용할 수 있습니다.

5. 변환 함수 템플릿:

템플릿을 사용하여 유형을 모든 포인터 유형(멤버 포인터 제외)으로 변환하는 변환 함수를 생성할 수 있습니다.

왜 컴파일러는 그렇지 않습니까? Type을 대체하시겠습니까?

주어진 예에서 smartref의 변환 연산자가 포인터를 반환하기 때문에 컴파일러는 Type을 대체하지 않습니다. 내부 데이터 멤버에. think()를 호출하려고 할 때 컴파일러는 p가 사람 개체에 대한 참조가 아니라 사람 개체에 대한 포인터라고 추론합니다. 따라서 명시적인 유형 대체를 수행하지 않습니다.

위 내용은 컴파일러가 변환 연산자의 유형을 대체하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿