Nó ở đó để giảm bớt việc sử dụng các loại vòng lặp, cho cả các thuật toán tiêu chuẩn và người sử dụng của khách hàng.
Ví dụ (hãy nhớ rằng RandomAccessIterator
là một subtype của ForwardIterator
):
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last)
{
RandomAccessIterator pivot, i, j;
//do your sorting algorithm
}
Nếu họ không mặc constructible bạn sẽ cần phải giao cho first
hoặc last
chỉ dành riêng cho nó để biên dịch.
Bạn không cần nó được đặt thành giá trị mặc định. Bất kỳ việc sử dụng trình lặp nào chưa được khởi tạo như vậy là không xác định. Không có nghĩa là sẽ không khôn ngoan để thêm một số kiểm tra, đặc biệt là trong các bản dựng gỡ lỗi.
Và không, bạn không nên ném vào hàm tạo mặc định. Nó sẽ phù hợp về mặt kỹ thuật, nhưng nhiều thuật toán sẽ thất bại đột ngột.
Nó không quan trọng nếu có một lý do thực tế cho nó; nó là bắt buộc*. Vì vậy, bỏ qua các yêu cầu lúc nguy hiểm của bạn. –
Vâng, nếu trình vòng lặp logic dựa vào một đối số, cách khác là thêm các hàm tạo mặc định để lại đối tượng ở trạng thái không hợp lệ, điều này cũng có vẻ như đang bị tán tỉnh với nguy hiểm. – Ayjay
A * làm việc * thay thế sẽ là để thay đổi vòng lặp của bạn để họ không dựa vào một đối số. Đặt chúng ở trạng thái rỗng nhưng hợp lệ. –