이 컴파일 :[] mutable {}이 (가) 컴파일되지 않는 이유는 무엇입니까?
[]{};
이뿐만 아니라 :
[]() mutable {};
그러나이 코드
, 컴파일러 나 오류 메시지를 던져 :[] mutable {};
^~~~~~~
error: lambda requires '()' before 'mutable'
어떤 특별한 이유가 있습니까?
이 컴파일 :[] mutable {}이 (가) 컴파일되지 않는 이유는 무엇입니까?
[]{};
이뿐만 아니라 :
[]() mutable {};
그러나이 코드
, 컴파일러 나 오류 메시지를 던져 :[] mutable {};
^~~~~~~
error: lambda requires '()' before 'mutable'
어떤 특별한 이유가 있습니까?
문법이 표준에 쓰여진 결과 일뿐입니다. 이것이 감독인지 아닌지 나는 모른다.
람다 식은 람다 소개자 (괄호)로 시작하고 그 뒤에 람다 선언자 (옵션)가옵니다.
람다 선언자는 인수 목록, 변경 가능 속성, 예외 지정자 및 반환 유형을 포함합니다. 인수 목록을 제외하고 모두 선택 사항입니다. 그래서 람다 선언자가 존재한다면 괄호가 있어야합니다.
이 이유 때문에 mutable 키워드 만 가질 수 없습니다.
섹션 5.1.2 [expr.prim.lambda]에서 n4296 (C++ 14 최종본)을 보면 이것은 문법에서 벗어난 것입니다. mutable
은 괄호가 포함 된 람다 선언자에서만 사용할 수 있습니다. 전체 람다 - 선언자는 선택 사항입니다. (그래서 괄호를 생략 할 수 있습니다).
@BaummitAugen 독서 및 이해 표준은 자신의 기술 (특히 영어가 모국어가 아닌 경우)이므로 IMHO에 질문하는 것이 좋습니다. – Slava
@BaummitAugen 어떤 특별한 이유가있을 경우 표준에서 그런 식으로 지정했습니다. 그렇지 않다면, 그렇습니다. 나는 이것을 여러 번 우연히 발견했기 때문에 이것을 바꿔야합니다. –
@RalphTandetzky 좋은 이유를 생각할 수 없으며, 대부분 감독 할 가능성이 있습니다. 그것을 바꿀 제안을하십시오! – TartanLlama