Trong số C++ Core Guidelines, Bjarne Stroustrup đề xuất sử dụng span khi truyền mảng bằng tham chiếu. Tại sao không chỉ vượt qua một đối tượng mảng :: std?Sự khác nhau giữa khoảng thời gian đi qua <T> và std :: mảng làm đối số là gì?
Trả lời
Đi qua
std::array
bởi giá trị sẽ là sao chép họ. Điểm củagsl::span
là chức năng lấy chúng là tham chiếu một mảng dữ liệu hiện có.gsl::span
có khả năng lấy mảng các kích thước được xác định theo thời gian chạy.std::array
được cố định tại thời gian biên dịch.gsl::span
không quan tâm loại sở hữu mảng; nó chỉ là một con trỏ + kích thước. Vì vậy, giao diện dựa trênspan
có thể được cung cấp dữ liệu từstd::vector
,QVector
và nhiều loại khác. Giao diện dựa trênstd::array
yêu cầu bạn sử dụng vùng chứa cụ thể đó.
Cảm ơn! Trên một lưu ý tương tự, tại sao không vượt qua một iterator bắt đầu và kết thúc như là đối số? –
Vì đó sẽ là hai tham số. Nó cũng sẽ yêu cầu hàm của bạn là một hàm * template *. Các hàm nhận các cặp lặp có thể hoạt động trên nhiều phạm vi khác nhau, bao gồm trong nhiều trường hợp trình lặp dòng. Các hàm hoạt động trên 'spans' có thể * chỉ hoạt động * trên một mảng giá trị liền kề. –
- 1. Thời gian Joda: sự khác nhau giữa Thời gian, Khoảng thời gian và Thời lượng là gì?
- 2. Sự khác nhau giữa mảng và đối tượng là gì?
- 3. Sự khác nhau giữa "<>" và "! =" Là gì?
- 4. Sự khác nhau giữa "thời gian biên dịch" và "thời gian chạy" là gì?
- 5. Sự khác nhau giữa mảng và mảng là gì?
- 6. Sự khác nhau giữa từ điển và mảng là gì?
- 7. Sự khác nhau giữa IEnumerable và mảng là gì?
- 8. Sự khác nhau giữa std :: set và std :: vector là gì?
- 9. Sự khác nhau giữa std :: partial_sum và std :: inclusive_scan là gì?
- 10. Sự khác nhau giữa std :: quick_exit và std :: abort và lý do std :: quick_exit cần thiết là gì?
- 11. XSLT: sự khác nhau giữa <copy-of> và <apply-templates> là gì?
- 12. Sự khác nhau giữa <chrono> và <ctime> là gì?
- 13. Sự khác nhau giữa <%: và <% = và <% # trong aspx là gì?
- 14. Trong Ruby on Rails, sự khác nhau giữa DateTime, Dấu thời gian, Thời gian và Ngày tháng là gì?
- 15. Sự khác nhau giữa WebConfigurationManager và ConfigurationManager là gì?
- 16. Sự khác nhau giữa angularjs và dust.js là gì?
- 17. sự khác nhau giữa ARM7 và ARM7 là gì
- 18. Sự khác nhau giữa fancyLocalization và preferredLanguage là gì?
- 19. Sự khác nhau giữa DateTime và Thời gian trong Ruby là gì?
- 20. Sự khác nhau giữa Phiên bản và 'Phiên bản thời gian chạy' trong .Net là gì?
- 21. Sự khác nhau giữa đa luồng thời gian và siêu phân luồng là gì?
- 22. Sự khác nhau giữa việc đi và cài đặt là gì?
- 23. Sự khác nhau chính giữa HTTP và COAP là gì?
- 24. Sự khác nhau giữa NSIndexSet và NSSet là gì?
- 25. sự khác nhau giữa tham số và đối số trong PowerShell là gì?
- 26. Sự khác biệt giữa thời gian chờ và thời gian chờ mở là gì?
- 27. Sự khác nhau giữa @RequestBody và @RequestParam là gì?
- 28. Sự khác nhau giữa cookie và cookiejar là gì?
- 29. Sự khác nhau giữa toGMTstring() và toUTCstring() là gì?
- 30. Trong javascript, sự khác nhau giữa một đối tượng và một không gian tên là gì?
Có lẽ để đơn giản và tránh mã bloat từ mẫu bạn cần sử dụng để chấp nhận bất kỳ kích thước 'std :: array' nào. – NathanOliver
Nguyên tắc cốt lõi không thuộc sở hữu của Stroustrup. –