2016-11-11 26 views
7

Bu derler:Neden [] değiştirilemiyor {} derlenmiyor?

[]{}; 

Bu durum:

[]() mutable {}; 

Ama bu kodla

, derleyiciler bana hata mesajları atmak:

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

herhangi bir özel nedeni var mı?

+2

@BaummitAugen okuma ve anlama standardı kendi başına bir beceridir (özellikle de ilk diliniz İngilizce değilse), bu yüzden bu tür soruları IMHO'ya sormanız iyi olur. – Slava

+0

@BaummitAugen Merak ediyorum, eğer belli bir sebep varsa, standart bunu bu şekilde belirtir. Eğer değilse, o zaman evet, bunun değişmesini isterim, çünkü şimdi birkaç kez bunun üzerinde tökezledim. –

+0

@RalphTandetzky Büyük bir neden, büyük olasılıkla bir gözetim düşünemiyorum. Değiştirmek için bir teklif yaz! – TartanLlama

cevap

5

O dilbilgisi standardında yazıldığı şekilde sadece bir sonucudur bu. Bunun bir gözetim olup olmadığını bilmiyorum.

bir lambda ifade isteğe bağlı bir lambda Bildiricisi ardından bir lambda tanıtıcı (parantez) ile başlar.

lambda Bildiricisi argüman listesi, değişken, nitelikleri, istisna belirteci ve türünü döndürür içeriyor. Tüm argümanlar listesi hariç, bunlar isteğe bağlıdır. Eğer bir lambda deklatoru mevcutsa, parantez orada olmalıdır.

Bu, yalnızca değişken anahtar kelime olamaz nedeni budur.

1

(C++ 14 nihai taslağı olan) n4296 bölümünde 5.1.2 [expr.prim.lambda] baktığınızda, o dilbilgisi düşüyor sadece yoludur. mutable'a yalnızca lambda-declarator - parantezleri dahilinde izin verilir. Bütün lambda declarator isteğe bağlı olsa da (bu yüzden parantezleri atlayabilirsiniz).

İlgili konular