2010-06-16 35 views

Trả lời

2

Đọc this. Trang này cũng hữu ích cho nhiều câu hỏi khác mà bạn có thể có trên con đường đá học C++.

Nói chung, bạn không phải làm như vậy, nhưng bạn nên làm như vậy. Dựa vào các giá trị mặc định có thể thực sự trở lại khó khăn với bạn. Ngoài ra điều này làm cho mã tốt hơn để hiểu cho người khác. Hãy nhớ rằng danh sách khởi tạo không ảnh hưởng đến thứ tự các thành viên được khởi tạo, được xác định theo thứ tự mà chúng được khai báo trong lớp.

+0

liên kết đã biến mất –

+0

@vlad_tepesch, cảm ơn đã thông báo, nó đã được chuyển [ở đây] (https://isocpp.org/wiki/faq/ctors). –

4

Có, điều đó là cần thiết. Đối tượng của bạn sẽ được cấp phát trên stack hoặc trên heap. Bạn không có cách nào để biết giá trị bộ nhớ đó chứa, và thời gian chạy không đảm bảo zeroing này cho bạn, vì vậy bạn phải khởi tạo biến.

+0

Chúng cũng có thể được phân bổ trong bộ nhớ tĩnh. Tôi tin rằng giá trị khởi tạo được thực hiện trong bối cảnh đó, vì vậy tôi sẽ là 0 tự động, nhưng tôi không chắc chắn. – fredoverflow

+1

Câu trả lời này tốt hơn và đơn giản hơn câu trả lời hàng đầu. – Darioush

+0

@Darioush Có, nó đơn giản hơn vì nó bao gồm trường hợp thông thường _only_ trong khi [phần trên cùng] (https://stackoverflow.com/a/3053257/711006) bao gồm tất cả các trường hợp. – Melebius

12

Tôi có phải khởi tạo lớp biến thành viên đơn giản,

Không, bạn không để khởi tạo các biến thành viên. Nếu bạn không khởi tạo chúng mặc dù, đừng cho rằng chúng sẽ có bất kỳ giá trị nào.

Nếu bạn thực hiện chương trình thử nghiệm và kiểm tra trình gỡ lỗi cách các giá trị được khởi tạo, bạn có thể thấy chúng được khởi tạo dưới dạng số không, nhưng điều đó không được đảm bảo. Các giá trị được khởi tạo cho bất kỳ thứ gì trong bộ nhớ trên ngăn xếp tại vị trí đó.

hoặc chúng có được đảm bảo được chỉ định giá trị mặc định của chúng trong mọi trường hợp không?

Chúng không được đảm bảo để chỉ định bất kỳ giá trị nào. Nếu bạn có các đối tượng thành viên, các hàm tạo mặc định sẽ được gọi cho chúng, nhưng đối với các kiểu POD thì không có khởi tạo mặc định.

Mặc dù bạn không phải làm điều đó, bạn nên khởi tạo tất cả thành viên trong lớp học của mình (để tránh khó tìm lỗi và có đại diện rõ ràng về khởi tạo/gọi hàm).

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