constexpr은 람다 함수 / 식에서 지원됩니까?
struct Test
{
static const int value = []() -> int { return 0; } ();
};
gcc-4.6을 사용하면 error: function needs to be constexpr. constexpr여러 장소에서 여러 가지 조합을 시도 했지만 운이 없습니다.
가요 constexpr(관계없이뿐만 아니라 람다 함수 지원 return유형 지정된 여부)? 올바른 구문은 무엇입니까?
가능한 해결 방법이 있습니까?
업데이트 : C ++ 17부터 상수 표현식에 람다가 허용됩니다.
Lambda는 현재 (C ++ 14) [expr.const] / (2.6)에 따라 상수 표현식에서 허용되지 않지만 N4487 이 승인 되면 허용됩니다 (작업 초안 N4582에서 찾을 수 있음).
이 제안은 상수 표현식에서 람다 표현식 을 허용 하여 기존 제한을 제거 할 것을 제안합니다 . 저자는 특정 람다 표현식 및 특정 클로저 객체에 대한 연산이 상수 표현식 내에 나타날 수 있다고 제안합니다 . 그렇게함으로써 우리는 또한 데이터 멤버 각각의 유형이 리터럴 유형 인 경우 클로저 유형을 리터럴 유형으로 간주 할 것을 제안합니다. 그리고, 그 경우,
constexpr지시자는 생성 된 함수 호출 연산자 것이, 람다 - 선언자 내에 생략constexpr그것의 요구 조건을 만족한다면constexpr(받는 유사한 기능constexpr이미 내재적 정의 생성자와 할당 연산자 기능 발생 추론).
C ++ 0x FDIS §7.1.5 [dcl.constexpr] / 1에서 :
constexpr지정은 변수, 함수 또는 함수 템플릿의 선언, 또는 문자 형태의 정적 데이터 멤버 선언의 정의를 적용한다.
람다 식은 그런 것이 아니므로 선언 할 수 없습니다 constexpr.
C ++ 17 이전에는 람다가 constexpr. 상수 표현식 내에서는 사용할 수 없습니다 .
C ++ 17로 시작하는 람다는 constexpr의미가 있습니다. 제안 N4487 은 C ++ 17 표준에 포함될 것입니다. 에 자신의 웹 사이트 허브 셔터는 ISO C ++위원회의 의자, 다음과 같이 말했다
Lambda는 이제 constexpr 함수 내에서 허용됩니다 .
FFWD에서 2018 년까지 :)
auto my_const_expression_lambda = []()
constexpr -> bool
{
return true ;
}
C ++ 17 이후
참조 URL : https://stackoverflow.com/questions/6420085/is-constexpr-supported-with-lambda-functions-expressions
'programing' 카테고리의 다른 글
| TypeScript의 'instanceof'에서 " 'Foo'는 유형 만 참조하지만 여기서는 값으로 사용되고 있습니다."라는 오류가 표시되는 이유는 무엇입니까? (0) | 2021.01.15 |
|---|---|
| 던지지 않도록 IDisposable.Dispose ()를 구현해야합니까? (0) | 2021.01.15 |
| MySQL vs. JSON-왜? (0) | 2021.01.15 |
| "from __future__ import braces"코드는 어디에 있습니까? (0) | 2021.01.15 |
| 깊이 1로 특정 커밋을 얕은 복제하는 방법은 무엇입니까? (0) | 2021.01.15 |