2011-08-09 40 views
5
explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator()); 

vector<int> vec(10); 
cout << "vec.size: " << vec.size() << endl; 
for (vector<int>::const_iterator iter=vec.begin(); iter != vec.end(); ++iter) 
{ 
    cout << *iter << endl; 
} 

Çıktı için vektör kurucusundaki:C++ standardı: Varsayılan "const T & değer" tipi 'int' VS2010 gelen

vec.size: 10 
0 
0 
0 
0 
0 
0 
0 
0 
0 
0 

Soru>: son C++ standart dayanarak, varsayılan int nedir vectorObject (size_type) kullanarak vektörün bir nesnesini tanımladığımız değer nedir?

Gördüğünüz gibi VS2010, 0 değerini varsayılan int değeri olarak verir. Ama bunun C++ standardı tarafından gerekli olup olmadığını bilmiyorum.

+3

Dil avukatlarının, değer sıfırlama, varsayılan başlatma ve sıfır başlatmayla arasındaki farkı getirmelerine izin vereceğim. Fakat 'T' ilkel sayısal bir tür olduğunda 'T()' sıfırı verdiğinden emin olabilirsiniz. –

cevap

13

Evet, bu gerekli davranış. Herhangi bir sayısal tür için T()T, 0 (elbette T türünde) verir.

Bu

sayısal türleri için sıfır başlatma aynıdır değeri başlatma, olarak adlandırılır.

+1

Yararlı bir şekilde, bu da sayısal türlerin * dizileri için çalışmak gerekiyordu, T x [7](); '. –

+1

Tam standartlar için [bu yanıt] 'a bakın (http://stackoverflow.com/questions/5950144/weird-c-code-snippet/5950176#5950176). – ildjarn