2011-12-16 77 views
24

Tôi đã sau struct trong C++ mã của tôi (Tôi đang sử dụng Visual Studio 2010):Cách khởi tạo một mảng cấu trúc trong C++?

struct mydata 
{ 
    string scientist; 
    double value; 
}; 

Những gì tôi muốn làm là để có thể khởi tạo chúng trong một cách nhanh chóng, tương tự như mảng khởi tạo trong C99 hoặc khởi tạo lớp trong C#, một cái gì đó á la:

mydata data[] = { { scientist = "Archimedes", value = 2.12 }, 
        { scientist = "Vitruvius", value = 4.49 } } ; 

Nếu đây là không thể thực hiện trong C++ cho một mảng của cấu trúc, tôi có thể làm điều đó cho một mảng của các đối tượng? Nói cách khác, kiểu dữ liệu cơ bản cho một mảng không quan trọng, điều quan trọng là tôi có một mảng, không phải là một danh sách, và tôi có thể viết các khởi tạo theo cách này.

+1

Không có lý do tại sao nó không hoạt động ... (btw đó sẽ là '.scientist = ...') Bạn đã thử chưa? – fge

+0

tại sao tránh lặp? –

+0

@fge Có, nó được gọi là khởi tạo tổng hợp và được giải thích thêm chi tiết [ở đây] (http://en.cppreference.com/w/cpp/language/aggregate_initialization) – pfabri

Trả lời

46

Cú pháp trong C++ là gần như giống hệt nhau (chỉ cần bỏ qua các thông số được đặt tên):

mydata data[] = { { "Archimedes", 2.12 }, 
        { "Vitruvius", 4.49 } } ; 

Trong C++ 03 công trình này bất cứ khi nào các mảng kiểu là một aggregate. Trong C++ 11, nó làm việc với bất kỳ đối tượng nào có một hàm tạo thích hợp.

+1

Tôi nghĩ rằng _uniform initialization_ thường được gọi là _list-initialization_ dạng (tức là không có '=')? Tôi không thể tìm thấy một tham chiếu để khởi tạo đồng bộ trong tiêu chuẩn. –

+0

@CharlesBailey: Rất có thể là thuật ngữ của tôi sai ở đây - vì vậy, tôi đã xóa phần đó. –

+0

@ BjörnPollex Nó sẽ không phải là một điều xấu để đề cập đến, tôi nghĩ. – cjcurrie

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