2011-12-30 74 views
7

Im cố gắng một cái gì đó như thế này (mà doesnt biên dịch):Cách khởi tạo các phần tử mảng bằng cách sử dụng danh sách bộ khởi tạo?

struct mystruct { 
    somestruct arr[4]; 
    mystruct(somestruct val) : arr[0](val), arr[1](val), arr[2](val), arr[3](val) {} 
}; 

thế nào là tốt nhất này được thực hiện trong C++?

Lưu ý: tôi có thể chỉ muốn đặt một số phần tử mảng của phương pháp này.

+1

bản sao có thể có của [Làm thế nào tôi có thể sử dụng danh sách khởi tạo thành viên để khởi tạo nó?] (Http://stackoverflow.com/questions/5602030/how-can-i-use-member-initialization-list-to-initialize-it) – ildjarn

+0

+1 để cố sử dụng danh sách trình khởi tạo thay vì chỉ định các giá trị bên trong phần thân của hàm tạo. – Andre

+0

@Andre, có bất kỳ khác biệt hiệu suất nào với "gán giá trị bên trong nội dung của hàm tạo" không? (Tôi không thể kiểm tra vì tôi không có trình biên dịch mà ví dụ của Mike sử dụng) – Rookie

Trả lời

6

Trong C++ 11, nếu bạn muốn thiết lập tất cả các yếu tố:

mystruct(somestruct val) : arr{val,val,val,val} {} 

Trong C++ 03, hoặc C++ 11 nếu bạn chỉ muốn thiết lập một số yếu tố:

mystruct(somestruct val) { 
    arr[0] = val; 
    arr[1] = val; 
    arr[2] = val; 
    arr[3] = val; 
} 
+1

Quá xấu nó không hoạt động trên trình biên dịch C++ trực quan, im sử dụng sau này vào lúc này, nghĩ rằng có cách tốt hơn. Btw, trình biên dịch có tối ưu hóa sau nhanh như trên không? – Rookie

+0

Để biên dịch, bạn có thể cần sử dụng cờ -std = C++ 11. Bạn nên có một số loại cửa sổ ưu tiên, nơi bạn có thể thiết lập nó. –

+0

Với tùy chọn trình biên dịch '-std = C++ 0x' tất cả những gì tôi đã làm là' classname :: clasname(): mảng {num1, num2, num3, num4} {/ * tất cả các hàm hoặc phương thức khởi tạo hoặc các phép gán biến tại đây */} '. Ban đầu tôi đã nhầm lẫn về những gì '{}' ở cuối trong giải pháp của bạn nhưng sau đó nhanh chóng nhận ra nó là phần thân của hàm tạo :-) – enthusiasticgeek

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