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
Trả lời
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 } );
}
Đ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). –
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'. –
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. –
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)
- 1. C++: khởi tạo hàm tạo cho mảng
- 2. C++ 11 khởi tạo vector trong một cuộc gọi hàm
- 3. Gọi hàm tạo như một hàm trong C#
- 4. C# gọi một hàm khởi tạo từ phần thân khác
- 5. C++ gọi hàm tạo mẫu rõ ràng
- 6. Gọi hàm tạo siêu trong C#
- 7. C - Khởi tạo một mảng toàn cục trong một hàm
- 8. gọi hàm tạo bản sao bên trong hàm tạo khác
- 9. Gọi hàm unset() trong tập lệnh PHP
- 10. Gọi hàm macro từ bên trong lệnh printf trong C
- 11. Hàm khởi tạo trống hoặc không có hàm tạo nào
- 12. Gọi hàm tạo cơ sở trong c + + CLI
- 13. Gọi hàm tạo lớp cơ sở sau (không có trong danh sách khởi tạo) trong C++
- 14. CoffeeScript: Mở rộng mảng trong gọi hàm
- 15. Sử dụng hàm tạo trong một cuộc gọi hàm?
- 16. C++: danh sách khởi tạo hàm tạo cho một mảng?
- 17. Xóa cuộc gọi hàm khởi tạo ủy nhiệm dư thừa?
- 18. Gọi hàm tạo "siêu lớp" trong JavaScript
- 19. Có thể khởi tạo biến tĩnh bằng cách gọi hàm
- 20. gọi một hàm khởi tạo từ một hàm khác trong java
- 21. Gọi hàm Javascript từ cuộc gọi lại C++ trong V8
- 22. Có thể constructor gọi một hàm tạo khác trong C++?
- 23. Tại sao rõ ràng gọi một hàm tạo trong C++
- 24. Gọi hàm tạo lớp con trước hàm tạo cha
- 25. Nhận lệnh lua khi hàm c được gọi là
- 26. Cách gọi hàm ẩn danh trong C#?
- 27. Gọi hàm thư viện C++ trong vimscript
- 28. Gọi hàm php từ dòng lệnh
- 29. Gọi hàm Python từ tập lệnh shell
- 30. Gọi hàm thành viên từ một hàm tạo
Đầ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
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
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