簡體   English   中英

為什么[] mutable {}無法編譯?

[英]Why does []mutable{} not compile?

這編譯:

[]{};

這也是:

[]() mutable {};

但是使用這段代碼,編譯器會向我拋出錯誤消息:

[] mutable {};
   ^~~~~~~
error: lambda requires '()' before 'mutable'

有什么特別的理由嗎?

這只是語法在標准中編寫方式的結果。 我不知道這是否是一種疏忽。

lambda表達式以lambda導入器(括號)開頭,后跟可選的lambda聲明符。

lambda聲明符包含參數列表,mutable,attributes,exception specifier和return type。 除參數列表外,所有這些都是可選的。 因此,如果存在lambda聲明符,則括號必須在那里。

這就是為什么你不僅可以擁有mutable關鍵字。

展望5.1.2 [expr.prim.lambda]在n4296 (這是C ++ 14的最終草案),這只是它落在了語法的方式。 mutable只能在lambda聲明器中使用 - 包括括號。 整個lambda聲明符是可選的(這就是為什么你可以省略括號)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM