Hôm nay, tôi stumbled khi these standard declarations của std::vector
constructors:Constructors: Sự khác biệt giữa mặc định và ủy thác một tham số
// until C++14
explicit vector(const Allocator& alloc = Allocator());
// since C++14
vector() : vector(Allocator()) {}
explicit vector(const Allocator& alloc);
Sự thay đổi này có thể được nhìn thấy ở hầu hết các container tiêu chuẩn. Một ví dụ hơi khác nhau là std::set
:
// until C++14
explicit set(const Compare& comp = Compare(),
const Allocator& alloc = Allocator());
// since C++14
set() : set(Compare()) {}
explicit set(const Compare& comp,
const Allocator& alloc = Allocator());
Sự khác biệt giữa hai mẫu và lợi ích của chúng (dis) là gì?
Chúng có tương đương hoàn toàn không - trình biên dịch có tạo ra thứ gì đó tương tự như thứ hai từ lần đầu tiên không?
Bạn nói "STL" vùng chứa. Bạn có nghĩa là chữ ký của các hàm thành viên trong thùng thư viện chuẩn như được bắt buộc bởi chính bản thân chuẩn hoặc mã của một số triển khai cụ thể? –
@LightnessRacesinOrbit Tôi có nghĩa là các cựu: Tôi giả sử chữ ký của các chức năng này là tiêu chuẩn (en.cppreference.com nói rằng có một sự thay đổi đến từ tiêu chuẩn - "kể từ C + + 14"). – Nelfeal
@LightnessRacesinOrbit Tôi không thực sự hiểu những gì cần chỉnh sửa; là "STL" sai? Đối với tôi, nó là một phần của thư viện chuẩn sử dụng các mẫu (do đó thư viện mẫu "tiêu chuẩn"). Hay nó là cái gì khác ? – Nelfeal