Tôi sẽ ngạc nhiên khi thấy rằng trình biên dịch thực sự biết các vùng chứa std và gọi các phương thức của chúng mà không có yêu cầu rõ ràng của tôi. Nếu đó là trường hợp, hãy tưởng tượng logic của trình biên dịch sẽ cần phải được tăng cường bất cứ khi nào một mô-đun thư viện mới được phát hành!
Thật thú vị, tuy nhiên, để tìm ra rằng một số trình biên dịch C++ có một số kiến thức về Thư viện chuẩn.
EDIT: Ok, tôi đã tìm thấy một ví dụ về kiến thức đó: C++ 11 dựa trên phạm vi cho các vòng áp dụng std :: begin và std :: end to range.
Dù sao, chúng tôi là những người lập trình, những người phải thực sự hiểu mã chúng tôi viết là gì và tìm ra cách để tối ưu hóa nó. Trình biên dịch chỉ cần dịch các hướng dẫn của chúng tôi chỉ áp dụng các tối ưu hóa nhỏ (nhưng quan trọng) (như nội tuyến, sao chép elision, v.v.)
Tại sao bạn nghĩ câu lệnh thứ hai hiệu quả hơn? Bạn có hồ sơ? –
@LuchianGrigore Lý do duy nhất tôi có thể nghĩ là phiên bản đầu tiên phải có một phân bổ/de-phân bổ cho mỗi chu kỳ vòng lặp, thứ hai không nhất thiết phải như vậy. – juanchopanza
@juanchopanza: Đúng, điều thứ hai sẽ không phân bổ/deallocate không nhất thiết trong mỗi lần lặp vòng lặp. – ronag