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
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!
Sözdizimi döngü sırasında tek satırlık...
Nasıl&; while (i == i) quot ;" te...
Bir yineleyici değişken olmadan dizi d...
Java ile sonsuz döngü...
C varsayılan kurucu olmadan yazın örne...