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