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 중국어 웹사이트의 기타 관련 기사를 참조하세요!