SORU
24 NİSAN 2013, ÇARŞAMBA


Ya süre kurucu sonsuz döngü olmadan

Bir test yaptım, ama çıkış sonu olmayan bir döngü olduğunu, neden bilmiyorum.

Aslında, başka bir test yapıyorum, ama bunu yazdığımda, döngü oluştu anlamıyorum. "ABC" düğmesine basın. Çıkış.

#include <map>
#include <string>
#include <iostream>

class test
{
public:
   std::map <int, int> _b;
   test();
   test (std::map<int, int> & im);
   ~test();
   };

test::test()
{
  std::cout<<"abc";
  _b.clear();
  _b[1]=1;
  test(_b);
}

test::test(std::map <int, int>& im)
{
   std::cout<<im[1];
}

test::~test() {};

int main ()
{
   test a;  
}

CEVAP
24 NİSAN 2013, ÇARŞAMBA


Burada sorun, derleyici yorumlar

test(_b);

Gibi bir kod oluşturur bir geçici nesnenin türü test geçerken parametre _b, ama bir değişken tanımlaması için bir değişken adında _b tipi test kullanarak varsayılan kurucu. Sonuç olarak, test geçici bir nesne ikinci kurucu kullanarak oluşturan kod parçası gibi görünüyor yinelemeli olarak yeni bir nesne türü test oluşturma ve yapıcı çağırma yerine başka bir zaman.

Bunu düzeltmek için, değişken açık bir isim vermek gibi

test t(_b);

Bu sadece 12 ** tip t, ikinci kurucu kullanarak başlatıldı adlı bir değişken olarak yorumlanabilir.

Varaslabunu daha önce görmüş ve yıllardır C programlama yaptım. Bana gösterdiğin için teşekkürlerbaşka henüzdil davası köşe!

Resmi bir açıklama için: C 03 ISO spec, &mezhebine Göre;6.8:

Orada bir belirsizlik içinde ilgili gramer anlatım-bildirileri: ifade deyimi ile bildirilir tarzı açık tür dönüşümü (5.2.3) olarak onun en soldaki ifadeyi olabilir ayırt edilemez bir beyanname nerede ilk Bildiricisi ile başlar (.Bu gibi durumlarda deyimi bir bildirimdir.

(Vurgu benim). Diğer bir deyişle, herhangi bir zaman ya da C ifadesi olarak bir açıklama yorumlar (geçici bir nesne döküm) veya ilan (değişken), bildirim almak olacaktır. C spec açıkça verir

T(a);

15* *türü bir şey a ilanı, dökme değil, bir örnek olarak.

Bu C 'nin 16 ** - bir ifade gibi görünüyor ne bir bildirim olarak yorumlanır oluyor yerine. Önce MVP gördüm, ama hiç bu ortamda gördüm.

Bu yardımcı olur umarım!

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EminemVEVO

    EminemVEVO

    12 Mayıs 2009
  • footiecyclo

    footiecyclo

    26 EYLÜL 2009
  • Max Lee

    Max Lee

    18 AĞUSTOS 2006