>백엔드 개발 >C++ >Lambda 함수를 `consexpr` 컨텍스트에서 사용할 수 있습니까?

Lambda 함수를 `consexpr` 컨텍스트에서 사용할 수 있습니까?

DDD
DDD원래의
2024-10-31 00:30:291039검색

 Can Lambda Functions Be Used in `constexpr` Contexts?

constexpr의 Lambda 함수 지원

constexpr의 람다 함수 지원은 C 커뮤니티에서 널리 논의된 주제였습니다. 현재 [expr.const]/(2.6)에 따라 상수 표현식에서는 람다가 허용되지 않지만 작업 초안 N4582에 포함된 N4487에서는 이 제한을 제거할 것을 제안합니다.

제안된 람다- 관련 변경 사항:

  • 상수 표현식에서 람다를 허용합니다.
  • 모든 데이터 멤버가 리터럴 유형인 경우 클로저 유형을 리터럴 유형으로 간주합니다.
  • 람다 선언자 내에서 constexpr 지정자가 생략된 경우 생성된 함수 호출 연산자는 constexpr 함수의 요구 사항을 충족하는 경우 constexpr로 간주됩니다.

예:

다음 예는 N4487이 승인되면 유효합니다.

<code class="c++">struct Test
{
  static const int value = []() constexpr { return 0; } ();
};</code>

해결 방법:

constexpr 지원이 공식적으로 추가되기 전의 해결 방법으로 다음을 사용할 수 있습니다. 람다 대신 함수 템플릿:

<code class="c++">struct Test
{
  template <typename>
  static const int value = 0;
};</code>

위 내용은 Lambda 함수를 `consexpr` 컨텍스트에서 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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