C 암시적 변환
C의 맥락에서 암시적 변환이라는 개념이 논의 대상이었습니다. "C에서 사용할 수 있는 다른 유용한 캐스트는 무엇입니까?"에 대한 최근 답변입니다. C의 변환을 올바르게 이해하는 방법에 대한 질문이 제기되었습니다.
다음 코드 조각을 고려하세요.
<code class="cpp">#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>
이 조각에서 첫 번째 함수 호출 func("one")의 결과는 다음과 같습니다. 오류. 이는 const char *에서 A로의 직접 변환이 없기 때문입니다. 문자열에서 A로의 변환이 있지만 이를 사용하면 C 표준에 따라 허용되지 않는 여러 암시적 변환이 필요합니다.
섹션 12.3.4 "변환"의 C 표준(SC22-N-4411.pdf)에는 다음과 같이 명시되어 있습니다.
4 At most one user-defined conversion (constructor or conversion function) is implicitly applied to a single value.
이는 변환을 수행할 때 암시적 사용자 정의 변환이 하나만 적용될 수 있음을 의미합니다. . 첫 번째 함수 호출에서 const char *에서 문자열로의 변환과 문자열에서 A로의 변환은 모두 사용자 정의 변환입니다. 둘 이상의 변환이 필요하므로 컴파일러에서 오류가 발생합니다.
위 내용은 C 암시적 변환에서 `func(\'one\')`이 오류를 일으키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!