2016-12-26 28 views
12

Có phải new int[8]() tương đương với new int[8]{} trong C++ 11 không?Có phải "int mới [8]()" tương đương với "int mới [8] {}" trong C++ 11 không?

Nói cách khác:

Liệu C++ 11 bảo đảm tiêu chuẩn mỗi new int[8]()new int[8]{} trả về một mảng zero-khởi tạo?

+0

Càng nhiều câu hỏi tôi đọc, tôi càng trở nên khó hiểu tại sao ủy ban nghĩ cú pháp cú đúp là một ý tưởng hay ... – Mehrdad

+1

@Mehrdad: Vậy ... cái gì, bạn không muốn khởi tạo một mảng mà bạn phân bổ với các giá trị? –

+0

@NicolBolas: Lần cuối bạn cần làm điều đó khi nào? Bạn đã từng làm gì trước C++ 11? – Mehrdad

Trả lời

16

new int[8]() sẽ, theo [dcl.init] /17.4, được khởi tạo giá trị. Vì nó là một mảng, [dcl.init] /8.3 cho chúng ta biết rằng giá trị khởi tạo một mảng có nghĩa là giá trị khởi tạo mỗi phần tử.

new int[8]{} sẽ, theo [dcl.init.list] /3.2, gọi khởi tạo tổng hợp trên mảng. Vì không có phần tử nào trong danh sách-braced-init, mỗi phần tử còn lại trong mảng (ví dụ: tất cả 8) sẽ được khởi tạo "từ một danh sách khởi tạo rỗng" ([dcl.init.aggr]/8). Trong đó, sau khi nhảy qua [dcl.init.list] một lần nữa, dẫn bạn đến 3.4, cho bạn biết rằng "từ một danh sách khởi tạo rỗng" cho các loại không tổng hợp có nghĩa là khởi tạo giá trị.

Vì vậy, có, cả hai đều đánh giá giống nhau.

Các vấn đề liên quan