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

  • hoorahjencar

    hoorahjencar

    6 HAZİRAN 2007
  • Peter Sharp

    Peter Sharp

    11 ŞUBAT 2013
  • Sams Page :D

    Sams Page :D

    15 Mart 2009