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

  • DavidParody

    DavidParody

    17 EKİM 2009
  • EatingIn

    EatingIn

    12 EKİM 2013
  • PoreoticsHD

    PoreoticsHD

    22 NİSAN 2010