SORU
12 EYLÜL 2013, PERŞEMBE


Yeniden Lambda giremez C 11, neden?

Örnek:

#include <functional>

int main() {
  auto test = []{};
  test = []{};

  return 0;
}

Bu gcc 4.7.2, aşağıdaki hata iletisini gösterir:

test.cpp: In function ‘int main()’:
test.cpp:5:13: error: no match for ‘operator=’ in ‘test = <lambda closure object>main()::<lambda()>{}’
test.cpp:5:13: note: candidate is:
test.cpp:4:16: note: main()::<lambda()>& main()::<lambda()>::operator=(const main()::<lambda()>&) <deleted>
test.cpp:4:16: note:   no known conversion for argument 1 from ‘main()::<lambda()>’ to ‘const main()::<lambda()>&’

Standart 5.1.2.3 (vurgu benim): gelen

Bir uygulama kapatma türü farklı aşağıda bu programın gözlemlenebilir davranışı değiştirmez sağlanan değiştirerek başka tarif: tanımlayın

— kapatma tipi boyutu ve/veya hizalama,

— ister kapatma türüdürbasit copyable(Madde 9)

kapatma Tipi Standart düzeni bir Sınıf (Madde 9), ya . — olsun

— ister kapatma türü POD Sınıf (Madde 9).

Söyleyebileceğim kadarıyla, bu karşı gidiyorum. Silinmiş atama operatörü kullanmaya çalışıyor ve başarısız oluyor. Eğer kolay bir çözüm varsa orada olduğunu merak ediyorum, ve daha geniş anlamda ne kopya constructibility için atılacak izin vermek için motive edici bir gerekçe genellikle Lambda.

CEVAP
12 EYLÜL 2013, PERŞEMBE


Bu iki Lambda aynı tür olduğunu düşünüyorum gibi görünüyorsun, ama bu doğru değil. Her biri kendi türü oluşturur:

#include <functional>
#include <type_traits>
#include <iostream>

int main() {
  auto test = []{};
  auto test2 = []{};
  std::cout << std::is_same< decltype( test ), decltype( test2 ) >::value << std::endl;
  return 0;
}

0 Yazdır. Tabii derleyici alıyorsanız hata mesajı bu açıdan... biraz daha net olabilir

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • André Frizzo

    André Frizz

    16 Aralık 2006
  • Jonathan Morrison

    Jonathan Mor

    24 Mart 2010
  • Michelle Phan

    Michelle Pha

    18 Temmuz 2006