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

  • Android Police

    Android Poli

    21 NİSAN 2010
  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • listedabive

    listedabive

    30 Ocak 2007