Bunu anlamıyorum:"Alternatif dilbilgisi" ne [yanı sıra öznitelikler içinde görünür?
(7.6.1) İki ardışık sol köşeli ayraç belirteçleri sadece bir nitelik-spesifik fi er tanıştırırken görünmelidir. [Not: Bir özelliğin köşeli parantezinin bir ardışık özelliğe izin verilmediği yerde görünürse, programı, dilbilgisi üretiminin köşeli parantezleri üretilmesine rağmen bozuktur. ] [Örnek ucuna bağlı bir vaziyette Not: (biraz kaynaktan değiştirilmiş)
// ...
void f() {
int x = 42, y[5];
// ...
y[[] { return 2; }()] = 2; // error even though attributes are not allowed
// in this context.
}
alternatif ne gramer [[
için kullanılabilir? Öznitelik yoksa örnek geçerli olur mu (ve örnek ne yapar?)
Bir felaketin sonuna kadar gidebileceğine dair bir fikrim var: teknik olarak belirli bir yolla ayrıştırılması gerekiyor, ancak zamanla bir süre sonra ortaya çıkacak olan sıkıntı ortaya çıkacak ve standart kısıtlılık yaratabilecektir. Bununla birlikte, çok sayıda durum özniteliğinin kullanılabileceği düşünüldüğünde, derleyicileri her zaman ayrıştırmak için çok daha basit bir iş çıkarmaktadır. [['Bir öznitelik belirteci olarak (ki bu da özelliği daha kolay devam ettirir). – GManNickG
@GMan: Görünüşe göre, lambda'lardan, özniteliklerin dışında bir [[belirteci ”elde etmek için başka bir yol yoktur. – Xeo
@Xeo: C + + 0x dilbilgisi ile sadece Ctrl + F'd ve bu doğru gibi görünüyor. Öznitelik konusunda uzman değilim ve bunun geçerli olacağını düşünmüyorum, ama lambda gerektirmeyen bir yöntem: struct {void operator [] (void *) {}} x; x [[[blah]] yeni int]; '. Bunun gibi bir öznitelik uygulayabileceğinizi sanmıyorum ama bu genel bir fikir. – GManNickG