2010-04-19 35 views
42
std::map<int,int> mapy; 
++mapy[5]; 

Có an toàn để giả định rằng mapy[5] sẽ luôn là 1? Ý tôi là, mapy[5] luôn nhận giá trị mặc định là 0 trước '++', ngay cả khi không khai báo rõ ràng, như trong mã của tôi?đồ <int,int> giá trị mặc định

+2

Có thể trùng lặp của [std :: giá trị mặc định bản đồ cho kiểu dựng sẵn] (http://stackoverflow.com/questions/4523959/stdmap-default-value-for-build-in-type) – bobobobo

+2

@bobobobo: câu hỏi này cũ hơn [std :: giá trị mặc định bản đồ cho kiểu dựng sẵn] (http://stackoverflow.com/questions/4523959/ stdmap-default-value-for-build-in-type), sau đó một bản sao phải là [std :: giá trị mặc định của bản đồ cho kiểu dựng sẵn] (http://stackoverflow.com/questions/4523959/stdmap-default -giá trị-cho-xây dựng-in-type). – mpromonet

Trả lời

66

Ngay khi bạn truy cập bản đồ bằng toán tử [], nếu khóa không tồn tại, nó sẽ được thêm vào. Trình khởi tạo mặc định của kiểu int được gọi - vì vậy nó sẽ nhận được một giá trị là 0.

+0

Viễn như tôi đã có kinh nghiệm, một giá trị ban đầu nguyên thủy 'int' ban đầu là _undefined_ - đó là nó có thể là 0, hoặc nó có thể là -99765521. Đã từng có một 'int' chưa được khởi tạo như một biến lớp và có một trong những giá trị lập dị đó xuất hiện trong chương trình của bạn? Điều đó nói rằng, tôi đã thử nghiệm điều này và có vẻ như nó hoạt động. '#include #include sử dụng không gian tên std; int main() { bản đồ m; cho (int i = 0; i <100; i ++) m [i] ++; cho (const pair & p: m) printf ("m [% d] =>% d \ n", p.first, p.second); } ' – bobobobo

+14

Nó hoạt động theo một cách khác với bạn nghĩ. int x; làm cho x nhận giá trị không xác định int x = int(); Một lần nữa x được 0 lớp foo {int x; foo(): x() {}}; foo f; Tại đây f.x sẽ bằng không –

7

Có, giá trị mặc định sẽ là giá trị mặc định của loại đó. Nếu bạn muốn một mặc định khác, bạn có thể tạo một lớp có hành vi giống như một int nhưng có một hàm tạo mặc định khác.

Các vấn đề liên quan