Điều này được gọi là giá trị khởi tạo. Từ tiêu chuẩn C++ 03, §8.5/7:
Một đối tượng có bộ khởi tạo là một bộ ngoặc đơn trống, tức là,(), sẽ được khởi tạo giá trị.
Và từ §8.5/5:
Để 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 với một constructor sử dụng tuyên bố , thì hàm tạo mặc định cho số T
được gọi (và khởi tạo không đúng định dạng nếu T
không có hàm tạo mặc định có thể truy cập được);
- nếu
T
là loại không phải là công đoàn mà không có người xây dựng khai báo, thì mọi thành viên dữ liệu không tĩnh và thành phần cơ sở của T
được khởi tạo giá trị;
- nếu
T
là 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 loại vô hướng, đối tượng được thiết lập với giá trị của 0
(số không) được chuyển đổi thành T
;
- nếu
T
là loại không thuộc loại công đoàn, mỗi thành viên dữ liệu phi tĩnh và mỗi lớp con cấp cơ sở không được khởi tạo;
- nếu
T
là loại công đoàn, thành viên dữ liệu được đặt tên đầu tiên của đối tượng) không được khởi tạo;
- nếu
T
là loại mảng, mỗi phần tử không được khởi tạo;
- nếu
T
là loại tham chiếu, không có khởi tạo nào được thực hiện.
Vì vậy, trong trường hợp của bạn, nó phụ thuộc vào định nghĩa của SpiHandleT
:
- Nếu đó là một đại lượng vô hướng, nó sẽ là zero-khởi
- Nếu đó là một kiểu lớp mà không một constructor do người dùng khai báo, các lớp con của nó sẽ được (đệ quy) giá trị được khởi tạo
- Nếu đó là loại lớp với một hàm tạo do người dùng khai báo , nó sẽ được xây dựng mặc định