2010-04-20 48 views
5

Câu hỏi này có liên quan đến bài đăng here. Có thể khởi tạo một mảng trong một cuộc gọi hàm hoặc gọi hàm tạo không? Ví dụ, hàm tạo của lớp foo muốn một mảng có kích thước 3, vì vậy tôi muốn gọi foo ({0, 0, 0}). Tôi đã thử điều này, và nó không hoạt động. Tôi muốn có thể khởi tạo các đối tượng của kiểu foo trong các danh sách khởi tạo constructor của các đối tượng khác, hoặc khởi tạo các foo mà không cần tạo một mảng riêng biệt. Điều này có thể không?C++ Khởi tạo Mảng trong Lệnh gọi hàm hoặc Gọi hàm

+0

Đầu tiên bạn nói về khởi tạo mảng, sau đó bạn cần phải intialize một đối tượng lớp. Vì vậy, những gì là nó bạn cần phải khởi tạo: một đối tượng mảng hoặc một đối tượng lớp? – AnT

+0

Việc khởi tạo một lớp là một trường hợp cụ thể mà tôi đã sử dụng làm ví dụ và là lý do tôi đặt câu hỏi. Tuy nhiên, bạn cũng có thể có hàm foo có một mảng có kích thước 3 và muốn gọi nó là: foo ({0, 0, 0}). Tôi đã thay đổi OP để làm cho điều đó rõ ràng hơn. – david

+0

Có, nhưng bạn vẫn đang hỏi "Có thể khởi tạo một mảng mà không gán nó không?" Vâng, vâng, có thể. Ví dụ, 'int a [10] = {5}' khởi tạo một mảng mà không gán nó, giống như bạn đã hỏi. Tuy nhiên, điều đó không giống như những gì bạn thực sự có vẻ quan tâm. – AnT

Trả lời

5

Không có trong tiêu chuẩn hiện tại. Nó sẽ có thể trong C++ 11

Trong gcc bạn có thể sử dụng một dàn diễn viên để buộc thành lập một thời gian, nhưng nó không phải là tiêu chuẩn C++ (C99):

typedef int array[2]; 
void foo(array) {} // Note: the actual signature is: void foo(int *) 
int main() { 
    foo((array){ 1, 2 } ); 
} 
+0

Điều này hoạt động trong C99, nhưng không phải trong C++ 03 (không phải trong C++ 0x - đây là một hợp chất theo nghĩa đen). –

+0

Mã này là OK với (macports) gcc lên đến 4.6; báo cáo gcc 4.7 báo lỗi ': lấy địa chỉ của mảng tạm thời'. –

+0

C++ 11 là tiêu chuẩn hiện hành, vì vậy câu trả lời này cần được cập nhật. –

0

Nếu cho phép thiết kế của bạn , bạn có thể xem xét gói dữ liệu bên trong một lớp và khởi tạo mặc định bằng 0 (hoặc bất kỳ giá trị nào bạn chọn)

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