>  기사  >  백엔드 개발  >  C 암시적 변환에서 `func(\"one\")`이 오류를 일으키는 이유는 무엇입니까?

C 암시적 변환에서 `func(\"one\")`이 오류를 일으키는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-01 05:36:02374검색

Why does `func(

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

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