SORU
7 EKİM 2008, Salı


Varsayılan boş parantez kurucu

Yuvarlak parantez boş (parantez) C varsayılan kurucu çağırmak için geçerli değil herhangi bir iyi bir neden var mı ?

MyObject  object;  // ok - default ctor
MyObject  object(blah); // ok

MyObject  object();  // error

Yazın gibiyim "()" her şey. otomatik olarak Bu izin değil iyi bir neden var mı?

CEVAP
8 EKİM 2008, ÇARŞAMBA


En can sıkıcı ayrıştırmak

Bu da C 'nin en can sıkıcı". ayrıştırma Temel olarak, bir deklarasyon olarak derleyici tarafından yorumlanacak bir şey beyan olarak yorumlanacaktır.

Aynı sorunu başka bir örnek:

std::ifstream ifs("file.txt");
std::vector<T> v(std::istream_iterator<T>(ifs), std::istream_iterator<T>());

v 2 parametre ile fonksiyon ilanı olarak yorumlanır.

Geçici parantez: başka bir çift ekleyin

std::vector<T> v((std::istream_iterator<T>(ifs)), std::istream_iterator<T>());

Ya da, eğer C 11 ve liste-başlatma (aynı zamanda üniforma başlatma olarak da bilinir) varsa:

std::vector<T> v{std::istream_iterator<T>{ifs}, std::istream_iterator<T>{}};

Bu işlev bildirimi olarak yorumlanabilir yolu yok.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChasesAndCrashes

    ChasesAndCra

    31 Temmuz 2009
  • Jonathan Leack

    Jonathan Lea

    26 ŞUBAT 2007
  • PorterRobinsonVEVO

    PorterRobins

    11 Kasım 2013