2012-06-22 38 views

Trả lời

17

Đ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
Các vấn đề liên quan