백엔드 개발 C++ 단항 연산자는 람다 표현식을 인수로 사용하여 함수를 호출할 때 모호성을 어떻게 해결합니까?

단항 연산자는 람다 표현식을 인수로 사용하여 함수를 호출할 때 모호성을 어떻게 해결합니까?

Nov 14, 2024 pm 04:22 PM

How does the unary   operator resolve ambiguity when calling a function with a lambda expression as an argument?

Lambda 함수에 대한 단항 연산자를 사용하여 모호한 오버로드 해결

제공된 코드 조각에서:

void foo(std::function<void()> f) { f(); }
void foo(void (*f)()) { f(); }

int main()
{
    foo([]() {}); // ambiguous
    foo(+[]() {}); // resolves to function pointer overload
}
로그인 후 복사

첫 번째 foo에 대한 호출이 모호하여 컴파일에 실패했습니다. 이러한 모호함은 람다 표현식이 암시적으로 std::function<void()> 및 void (*f)().

이 모호성을 해결하기 위해 두 번째 호출에서 람다 앞에 단항 연산자가 사용됩니다. 연산자는 람다 표현식을 두 번째 오버로드와 정확히 일치하는 함수 포인터 유형인 void(*)()로 변환합니다.

C 표준에 따르면:

  • 단항 연산자 인수를 기본 유형(산술, 열거형 또는 포인터)으로 변환합니다.
  • 람다 표현식의 경우 클로저의 변환 함수 type은 동일한 매개변수 및 반환 유형을 사용하여 명시적으로 함수 포인터로 변환됩니다.

따라서 []() {} 표현식은 void (*)() 함수 포인터를 생성하며 이는 다음과 명확하게 일치합니다. 두 번째 오버로드.

람다 표현식을 함수 포인터 유형으로 명시적으로 캐스팅하여 이를 방지할 수도 있다는 점에 유의하는 것이 중요합니다. 모호함:

foo((void (*)())([]() {}));
로그인 후 복사

위 내용은 단항 연산자는 람다 표현식을 인수로 사용하여 함수를 호출할 때 모호성을 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어 함수 형식 문자 케이스 변환 단계 C 언어 함수 형식 문자 케이스 변환 단계 Mar 03, 2025 pm 05:53 PM

C 언어 함수 형식 문자 케이스 변환 단계

C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까? C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까? Mar 03, 2025 pm 05:52 PM

C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

Gulc : C 도서관은 처음부터 구축되었습니다 Gulc : C 도서관은 처음부터 구축되었습니다 Mar 03, 2025 pm 05:46 PM

Gulc : C 도서관은 처음부터 구축되었습니다

C 언어 기능의 정의 및 호출 규칙은 무엇이며 C 언어 기능의 정의 및 호출 규칙은 무엇이며 Mar 03, 2025 pm 05:53 PM

C 언어 기능의 정의 및 호출 규칙은 무엇이며

C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? Mar 12, 2025 pm 04:50 PM

C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까?

뚜렷한 사용 및 문구 공유 뚜렷한 사용 및 문구 공유 Mar 03, 2025 pm 05:51 PM

뚜렷한 사용 및 문구 공유

메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까? 메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까? Mar 03, 2025 pm 05:51 PM

메모리에 저장된 C 언어 함수의 반환 값은 어디에 있습니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? Mar 12, 2025 pm 04:52 PM

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?

See all articles