Có phải int a = int();
nhất thiết phải cho tôi bằng không?
Có, tiêu chuẩn đảm bảo rằng nó cung cấp cho bạn 0.
Điều này được gọi là Giá trị khởi tạo. Đối với loại int
, Khởi tạo giá trị về cơ bản sẽ kết thúc là Zero Initialization.
Trường hợp này được quy định trong tiêu chuẩn ngôn ngữ ở đâu?
Các quy tắc được quy định rõ ràng trong tiêu chuẩn trong phần 8,5. Tôi sẽ trích dẫn những người liên quan đến Q ở đây:
C++ 03: 8,5 Initializers
Para 7:
Một đối tượng có initializer là một tập rỗng ngoặc, tức là,(), sẽ được khởi tạo giá trị.
Giá trị khởi & Zero, khởi được định nghĩa trong 8,5 Para 5 như:
Để giá trị khởi tạo một đối tượng kiểu T có nghĩa là:
- nếu T là một loại lớp (điều 9) với một hàm tạo do người dùng khai báo (12.1), sau đó hàm khởi tạo mặc định cho T được gọi (và khởi tạo bị hỏng nếu T không truy cập được hàm tạo mặc định);
- nếu T là một loại không phải là công đoàn mà không có một hàm tạo do người dùng khai báo, thì mỗi thành phần dữ liệu không thành phần và thành phần cơ bản của T được khởi tạo giá trị;
- nếu T là một loại mảng, thì mỗi phần tử được khởi tạo giá trị;
- cách khác, đối tượng được zero-khởi
Để zero-khởi một đối tượng kiểu T có nghĩa là:
- nếu T là một kiểu vô hướng (3.9), đối tượng được đặt thành giá trị 0 (không) được chuyển thành T;
- nếu T là loại nhóm không phải là công đoàn, mỗi thành viên dữ liệu phi tuyến tính và từng lớp con cấp cơ sở
không được khởi tạo;
- nếu T là loại liên kết, thành viên dữ liệu được đặt tên đầu tiên của đối tượng là không được khởi tạo;
- nếu T là một loại mảng, mỗi phần tử không được khởi tạo;
- nếu T là kiểu tham chiếu, thì không khởi tạo được thực hiện.
Lưu ý: Các văn bản in đậm được nhấn mạnh bởi tôi.
thể trùng lặp của [? Làm constructor mặc định tích hợp sẵn trong các loại có] (http : //stackoverflow.com/questions/5113365/do-built-in-types-have-default-constructors) – Kaz