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

  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • ŠĩŗĜŕôŵåɭȍҭҭ

    ŠĩŗĜŕô

    29 Kasım 2009
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011