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ş:
Ne zaman bir varsayılan kurucu yerine ...
Java hata: Örtülü süper oluşturucu var...
Varsayılan neden atama move-kurucu/?...
Neden't bir yapı için varsayılan ...
Java varsayılan kurucu...