Nó thực sự không rõ ràng với tôi tại sao bất cứ ai sẽ đặt tên một hình thức cụ thể của khởi tạo "giá trị khởi tạo". Nghe có vẻ như nó khởi tạo đối tượng bằng cách cho nó một giá trị ... nhưng đó là những gì khởi tạo nói chung, và tên không cho bạn biết bất cứ điều gì về mà giá trị nó sẽ sử dụng cho việc khởi tạo.Tại sao khởi tạo giá trị được đặt tên?
Trả lời
Các Boost value_init write-up cung cấp một lịch sử khá chi tiết về giá trị khởi nó đã kết thúc trong tiêu chuẩn từ defect report 178: More on value-initialization và nó có vẻ như thuật ngữ có nguồn gốc từ defect report 35: Definition of default-initialization. Mặc dù không ai trong số các tài liệu này thực sự cung cấp một nguồn gốc thích hợp cho thuật ngữ nó cung cấp một số ý tưởng tốt, nó nói:
Các Corrigendum đầu tiên kỹ thuật cho ++ chuẩn C (TC1), mà dự thảo đã được phát hành ra công chúng Tháng 11 năm 2001, giới thiệu Core Sự cố 178 (trong số nhiều vấn đề khác, tất nhiên).
Vấn đề đó đã giới thiệu khái niệm mới về khởi tạo giá trị (nó cũng cố định từ ngữ để không khởi tạo). Không chính thức, khởi tạo giá trị tương tự như khởi tạo mặc định với ngoại lệ trong một số trường hợp thành viên dữ liệu không tĩnh và lớp cơ sở các đối tượng con cũng được khởi tạo giá trị. Sự khác biệt là đối tượng được khởi tạo giá trị sẽ không có (hoặc ít nhất là ít hơn khả năng có) giá trị không xác định cho các thành viên dữ liệu và lớp cơ sở các đối tượng phụ; không giống như trường hợp của một đối tượng mặc định được xây dựng. (xem Vấn đề cốt lõi 178 cho mô tả chuẩn).
Để chỉ định khởi tạo giá trị của đối tượng, chúng tôi cần sử dụng bộ khởi tạo bộ trống:().
và khởi tạo giá trị ít có khả năng để lại một đối tượng có giá trị không xác định so với mặc định-initalization.
OT, nhưng thay đổi này đã đưa ra một vấn đề khó chịu; cho một cấu trúc POD 'T foo = T();' và các câu lệnh tương tự như vậy chỉ được đảm bảo "làm việc" trong C++ 03, vì vậy trong mã di động bạn không thể làm điều đó mà không có rủi ro rằng nó sẽ được chạy trên một Trình biên dịch C++ 98 và âm thầm gây ra UB đáng sợ. –
@MattMcNabb không may, có báo cáo lỗi cho điều đó không? –
Không phải là tôi biết, đó chỉ là một điều mới được thêm vào trong TC1 –
- 1. Khởi tạo giá trị Scala
- 2. Tại sao biến toàn cầu và tĩnh được khởi tạo thành giá trị mặc định?
- 3. tại sao f được đặt sau giá trị float?
- 4. Đặt giá trị được tạo theo Sitecore
- 5. Tại sao biến ngoài của tôi chưa được khởi tạo?
- 6. Mặc định được khởi tạo so với Giá trị được khởi tạo
- 7. Tại sao bạn đặt tên cho lớp hai lần trong quá trình khởi tạo trong Java?
- 8. Tại sao malloc khởi tạo các giá trị bằng 0 trong gcc?
- 9. Tại sao RAII lại được đặt tên như vậy?
- 10. Giá trị $ {user.home} được khởi tạo như thế nào?
- 11. Khởi tạo giá trị: khởi tạo mặc định hoặc khởi tạo không?
- 12. Giá trị trường đặt Django sau khi biểu mẫu được khởi tạo
- 13. Tại sao nó cần thiết mà các biến phải được khởi tạo giá trị mặc định trong Java
- 14. Khởi tạo toàn bộ mảng 2D với một giá trị
- 15. Giá trị không được khởi tạo so với giá trị null của các loại tham chiếu
- 16. Giá trị đối tượng khởi tạo C#
- 17. Giá trị chưa được khởi tạo được tạo bởi phân bổ ngăn xếp
- 18. Trường chỉ đọc được khởi tạo là null, tại sao?
- 19. Làm thế nào để khởi tạo Zero, khởi tạo tĩnh và chênh lệch khởi tạo giá trị?
- 20. Tại sao đặc điểm Sao chép cần thiết cho khởi tạo mảng mặc định (có giá trị cấu trúc)?
- 21. Tại sao Perl 5 không cho bạn biết tên của biến khi nó phàn nàn về giá trị chưa được khởi tạo?
- 22. Mảng không được khởi tạo tĩnh bởi bộ khởi tạo mảng. Tại sao?
- 23. Tại sao tôi nhận được "không tổng hợp không thể được khởi tạo với danh sách bộ khởi tạo"
- 24. Tại sao các nhà thầu được đặt tên là static
- 25. Tại sao tiện ích `nm` được đặt tên như vậy?
- 26. Tại sao các biểu thức hàm ẩn danh và các biểu thức hàm được đặt tên được khởi tạo khác nhau?
- 27. Tạo hỗn hợp (giá trị được đặt) CPPDEFINES trong SCON
- 28. hỗn hợp của trường: giá trị và giá trị khởi tạo
- 29. Đặt giá trị khởi đầu cho cột với autoincrement
- 30. Khởi tạo giá trị thông qua biến Session
Thuật ngữ này dường như được đề xuất lần đầu tiên trong [N1191] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1999/n1191.pdf). –
Có lẽ thực tế là nó * thực hiện * luôn mang đến một giá trị hợp lý. Mặc định khởi tạo thường không. – chris