2016-01-04 25 views
7

Her lambda benzersiz bir bilinmeyen türe sahip olmalıdır .. Aynı kapsamdaki iki lambda'nın farklı tipleri olması garanti edilir mi?Lambdaların farklı tipleri var mı?

int main() { 
    auto l1 = [](){}; 
    auto l2 = [](){}; 
    static_assert(std::is_same<decltype(l1), decltype(l2)>::value == false, "Types cannot be equal!"); 
} 

Bu, ancak iddiaların asla kovulmayacağının garanti edilip edilmediğini bilmek istiyorum.

cevap

12

Evet her lambda ifadesinin belirli bir tipini ([expr.prim.lambda]/3) üretir:

(ayrıca kapak nesne türü) lambda ifade türüdür özellikleri aşağıda açıklanmış olan kapatma türü olarak adlandırılan, adsız kayıpsız sınıf türü olan bir özgün.

alıntı "Aşağıda açıklandığı gibi" sona göz önüne alındığında,

+1

Herhangi şans size eksiksiz olduğunu alıntının kaynağına bir bağlantı eklemek olabilir [vurgu eklenmiştir]? –

+3

@IStanley: '[expr.prim.lambda]/3' bir özniteliktir (C++ standardında bir bölümü belirtir). –

+0

Her gün yeni bir şeyler öğreniyorsunuz! Teşekkürler. –

İlgili konular