>백엔드 개발 >C++ >C가 암시적 유형 변환 중에 하나의 사용자 정의 변환만 허용하는 이유는 무엇입니까?

C가 암시적 유형 변환 중에 하나의 사용자 정의 변환만 허용하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-01 01:14:28624검색

Why Does C   Allow Only One User-Defined Conversion During Implicit Type Conversions?

C 암시적 변환: 사용자 정의 변환 규칙 이해

이전 응답에 대한 최근 피드백을 고려하여 이해를 명확히 하는 것이 중요합니다. C의 암시적 변환.

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

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

첫 번째 함수 호출에서는 const char*에서 A로 직접 변환되지 않기 때문에 오류가 발생합니다. 문자열에서 A로의 변환이 있더라도 이를 적용하려면 여러 번의 변환이 필요하며 이는 허용되지 않습니다.

C 표준(SC22-N-4411.pdf)의 답변은 섹션 12.3.4에 나와 있습니다. titled 'Conversions':

"4 At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value."

이는 암시적 유형 변환 또는 초기화 중에 하나의 암시적 사용자 정의 변환(생성자 또는 변환 함수)만 단일 값에 적용될 수 있음을 의미합니다.

주어진 코드에서 첫 번째 함수 호출인 func("one")는 const char* "one"에서 A로의 암시적 변환을 사용하려고 시도하지만 두 번의 변환(하나는 const char에서 하나)이 필요하기 때문에 실패합니다. *는 std::string으로, 또 다른 하나는 std::string에서 A로). 다른 두 함수 호출은 각각 하나의 암시적 변환만 포함하므로 유효합니다.

위 내용은 C가 암시적 유형 변환 중에 하나의 사용자 정의 변환만 허용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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