C 암시적 변환: 설명
최근 C의 대체 캐스트에 관한 이전 답변에 대한 의견으로 인해 암시적 변환의 정확성에 대한 질문이 제기되었습니다. . 명확한 설명을 위해 다음 코드 부분을 검토하겠습니다.
#include <string> struct A { A( const std::string & s ) {} }; void func( const A & a ) { } int main() { func( "one" ); // error func( A("two") ); // ok func( std::string("three") ); // ok }
원래 const char *에서 A로의 직접 변환이 없기 때문에 첫 번째 함수 호출에서 오류가 발생한다고 주장되었습니다. 그러나 , 문자열에서 A로의 변환이 있습니다. 이 변환을 활용하려면 두 개 이상의 단계가 필요하며 이는 일반적으로 금지됩니다. 이 주장은 g 4.4.0 및 Comeau 컴파일러에서 지원됩니다.
추가 조사를 통해 C 표준(12.3.4)은 최대 하나의 사용자 정의 변환( 생성자 또는 변환 함수)는 단일 값에 암시적으로 적용될 수 있습니다. 이 판결은 관찰된 동작과 일치하며 암시적 변환의 제한 사항을 명확히 합니다.
요약하면 단일 값에 대해 하나의 암시적 사용자 정의 변환만 허용됩니다. 제공된 코드에서 func("one") 호출은 허용되지 않는 여러 암시적 변환이 필요하기 때문에 실패합니다.
위 내용은 C의 암시적 변환에 여러 사용자 정의 변환이 포함될 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!