>  기사  >  백엔드 개발  >  C에서 다중 암시적 사용자 정의 변환을 적용할 수 있습니까?

C에서 다중 암시적 사용자 정의 변환을 적용할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-31 22:09:02971검색

Can Multiple Implicit User-Defined Conversions Be Applied in C  ?

C 암시적 변환: 설명

최근 토론에서 C의 암시적 변환의 유효성에 의문이 제기되었습니다. 특히 문제는 여러 암시적 사용자 정의 변환이 허용되는지 여부와 관련됩니다. 이 문제를 밝히기 위해 다음 코드를 살펴보겠습니다.

<code class="cpp">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
}</code>

원래 질문에 언급된 대로 첫 번째 함수 호출에서는 const char *를 A로 변환하지 않기 때문에 오류가 발생합니다. . 문자열에서 A로의 변환이 존재하는 동안 이를 적용하는 것은 허용되지 않는 여러 변환을 포함합니다. 이는 C 표준에 의해 확증됩니다.

<code class="cpp">4 At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value.</code>

이 경우 두 가지 암시적 변환(문자열을 const char 으로, const char 을 A로)이 있으면 이 규칙을 위반하여 다음과 같은 결과가 발생합니다. 컴파일러 오류. 따라서 C에서 다중 암시적 사용자 정의 변환이 금지된다는 주장은 정확합니다.

위 내용은 C에서 다중 암시적 사용자 정의 변환을 적용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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