5

Thư viện chuẩn không phân biệt các biến vị ngữ và biến vị ngữ của các thuật toán chung. Ví dụ: std::sort() trông giống như:Tại sao phân biệt các biến vị ngữ và các biến vị ngữ không phải là biến vị ngữ cho các thuật toán chung?

template< class RandomIt > 
void sort(RandomIt first, RandomIt last); 

template< class RandomIt, class Compare > 
void sort(RandomIt first, RandomIt last, Compare comp); 

Có vấn đề gì trong việc chỉ viết những điều sau đây không?

template< class RandomIt, class Compare = std::less<void>> 
void sort(RandomIt first, RandomIt last, Compare comp = Compare{}); 
+11

Không có điều nào như đối số mẫu mặc định cho mẫu chức năng trong C++ 03. –

+0

@ T.C. Vì vậy, giả sử chúng tôi chỉ thiết kế lại toàn bộ điều, nên hình thức thứ hai được ưa thích? – Lingxi

+0

@ T.C. Tôi tin rằng điều đối số mẫu mặc định thực sự là một câu trả lời. – Angew

Trả lời

8

Khá nhiều lý do lịch sử.

C++ 98/03 không có đối số mẫu mặc định cho mẫu chức năng, do đó, nó phải sử dụng hai quá tải. Và thay đổi nó sau đó có thể phá vỡ mã người dùng.

Vì vậy, giả sử chúng tôi chỉ thiết kế lại toàn bộ nội dung, nên hình thức thứ hai được ưa thích hơn?

Đó là những gì current Ranges TS working draft thực hiện.

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