2010-06-16 22 views
9
int *pi = new int(0); 

Burada 0'nın anlamı nedir? Tam uzunluktaki tamsayı dizisi anlamında mıdır?int (?) In int * pi = new int (0); anlamı nedir?

+0

İyi soru. Temel bir arka plana sahip misiniz? Diğer C dilleri köşeli parantez kullanırken, temel dizi başlatıcıları parens'dir. –

cevap

12

Bu bir başlatıcıdır (yapıcı parametresi). Yeni oluşturulan int, 0 değerine sahip olacaktır.

+6

Bu bir başlatıcıdır. Fakat bu bir yapıcı parametresi değildir. 'Int' yazısının kurucusu yok. – AnT

+1

@AndreyT: Açıklayabilir misiniz? Kurucu bir argüman alırsa, o zaman başlatıcıdan nasıl ayrılır? Bu ikisi arasındaki gerçek fark nedir? – understack

+6

@understack: "Constructor", * class * türlerinde bulunan özel bir üye fonksiyonudur. Sınıf dışı türler (int 'gibi) üye işlevlerine sahip değildir ve elbette hiçbir kurucuya sahip değildir. Burada işlem yaptığınız işleme * initialization * denir. Başlangıç, önemsiz bir kavramdır, farklı türler için farklı tanımlanmıştır. Sınıf türleri için başlatma genellikle (ancak her zaman değil) bir kurucu çağrısı anlamına gelir. Sınıf dışı türler için başlatma, yukarıda belirtilen nedenlerden dolayı herhangi bir "kurucu" içermeden tanımlanır. – AnT

7

Size bir int bir işaretçi istiyorum, ve bir kez onlar new char[10] geliyordu Birisi new char(10) yazdığı ortaya çıktı bir hata üzerinde çok uzun süredir kayıp 0.

o int değeri için olmak demektir . Derleyici bununla iyiydi, ancak bu noktaya gelmek çok zor olan büyük yolsuzluk sorunlarına neden oldu. Bu 10 yıl önceydi ve şimdi yaptığımız araçlara sahip değildik. Asla unutmayacağım. Bana göre

-1

0 önemi birileri Ben kasten bu bazı 'varsayılan değer' [değiştir] ziyade 0

olmak istiyorum

diyerek olması da Birçok durumda da 0 olması pek çok hata ayıklama derlemesinde 0 olarak ayarlanacak, ancak sürüm derlemelerinde genellikle önceden başlatılmamış bellekte bulunan değer olacaktır.

+0

Varsayılan değer sadece "başlatılmamış", yani orada ne olacağını anlatacak bir şey yok. Çoğu uygulama, size vermeden önce ham, dinamik olarak ayrılmış belleği başlatmaz (hata ayıklama uygulamaları haricinde, bazıları hataları izlemenize yardımcı olan bayrak değerlerini kullanır). –

+0

Ooops, oldukça haklıyım, Int'i ve false gibi varsayılan değerlere sahip bool gibi diğer sınıfları düşünüyordum, kendimi rahatsız ettim. –

+0

Aslında, evet, orada bir varsayılan değer var - 'new int()' değeri başlatıldı. Sadece başlatılmamış olan 'yeni int'. –