>  기사  >  백엔드 개발  >  C의 암시적 변환에 여러 사용자 정의 변환이 포함될 수 있습니까?

C의 암시적 변환에 여러 사용자 정의 변환이 포함될 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-03 16:49:30465검색

Can Implicit Conversions in C   Involve Multiple User-Defined Conversions?

C 암시적 변환: 설명

최근 C의 대체 캐스트에 관한 이전 답변에 대한 의견으로 인해 암시적 변환의 정확성에 대한 질문이 제기되었습니다. . 명확한 설명을 위해 다음 코드 부분을 검토하겠습니다.

#include <string>

struct A {
    A( const std::string &amp; s ) {}
};

void func( const A &amp; 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.