Lý do đằng sau việc cho phép khởi tạo vô hướng với dấu ngoặc nhọn là gì?
int
là POD. Vì vậy, việc khởi tạo cú đúp được cho phép trong trường hợp int
(và đối với tất cả các kiểu dựng sẵn), vì nó làm cho cú pháp khởi tạo nhất quán với các POD khác.
Ngoài ra, tôi đoán bất cứ điều gì lý do đằng sau C++ 11 Cú pháp khởi tạo đồng nhất, cũng (một phần) áp dụng cho cú pháp này được C++ 03 cho phép. Nó chỉ là C++ 03 đã không mở rộng này để bao gồm các loại không pod như các thùng chứa tiêu chuẩn.
Tôi có thể thấy một nơi khởi tạo này hữu ích trong C++ 03.
template<typename T>
void f()
{
T obj = { size() } ; //T is POD: built-in type or pod-struct
//code
}
Bây giờ này có thể được khởi tạo với struct
mà bắt đầu với một thành viên phù hợp, cũng như bất kỳ loại số học:
struct header
{
size_t size; //it is the first member
//...
};
f<header>(); //body becomes : header obj = { size(); }; which is fine
f<size_t>(); //body becomes : size_t obj = { size(); }; which is fine
Cũng lưu ý POD rằng, cho dù loại struct hoặc built-in, cũng có thể được khởi tạo thống nhất như:
header h = header(); //value-initialized
int i = int(); //value-initialized
vì vậy, tôi tin rằng một lý do là nhất quán!
Nó chỉ là một phần của ngữ pháp của C++. Cho phép tất cả các đối tượng được khởi tạo theo cách này là phù hợp hơn và có thể mô phỏng việc thực hiện. –
trình biên dịch trước C++ 11 nào bạn đã thử? – TemplateRex
Chủ đề tương tự: [Niềng răng xung quanh chuỗi chữ trong khai báo mảng char hợp lệ?] (Http://stackoverflow.com/questions/10147264/braces-around-string-literal-in-char-array-declaration-valid-eg-char -s) – Nawaz