2015-09-03 12 views
5

Qt 5.0 đã giới thiệu các phương pháp lặp cbegin()cend() trong các lớp chứa khác nhau như QList hoặc QMap.cbegin()/cend() so với constBegin()/constEnd()

Nhưng cũng có các phương pháp constBegin()constEnd() trong các lớp đó.

Tất cả các phương pháp đó là const và trả về kiểu STL const_iterator.

  • Do cbegin()/cend() có cùng chức năng hơn constBegin()/constEnd()? Đối với tôi có vẻ như vậy, nhưng không có gì được nêu trong tài liệu của QList, QMap hoặc container classes.
  • Có trường hợp nào người ta nên sử dụng cbegin()/cend() thay vì constBegin()/constEnd() hoặc ngược lại không?
+2

Kiểm tra nguồn, Luke ... [QList] (http://code.woboq.org/qt5/qtbase/src/corelib/tools/qlist.h.html#307), [QMap] (http: //code.woboq.org/qt5/qtbase/src/corelib/tools/qmap.h.html#521), v.v. (TL; DR: chúng giống nhau) – peppe

+0

@peppe Điểm tốt. Nhưng khi nó không được nêu trong các tài liệu mà chúng giống hệt nhau, ai đảm bảo rằng chúng sẽ vẫn giống nhau trong tương lai? –

+0

Đó là một thay đổi hành vi sẽ phá vỡ rất nhiều mã mà nó không thể xảy ra. – peppe

Trả lời

9

cbegin()cend() nơi được giới thiệu về khả năng tương thích với vùng chứa Thư viện chuẩn, tất cả đều chứa các hàm như vậy kể từ C++ 11.
Qt chỉ muốn giữ giao diện tương tự như thư viện chuẩn. constBegin() v.v ... chỉ là các phiên bản cũ hơn (Qt đã thêm chúng trước khi C++ 11 được phát hành). Không có sự khác biệt trong việc sử dụng chúng.

Tôi muốn sử dụng constBegin()constEnd() vì chúng rõ ràng hơn và 'phong cách Qt', nhưng đó chỉ là sở thích cá nhân của tôi. cbegin()/cend() có thể được sử dụng bởi một số thuật toán được triển khai cho vùng chứa tiêu chuẩn (do đó sự tồn tại của chúng trong Qt - chúng giúp tái sử dụng một số mã). Sử dụng chúng nếu bạn mong đợi rằng tại một số điểm bạn muốn sử dụng lại mã của bạn bên ngoài Qt.

+1

Sử dụng cbegin et al. giúp dễ dàng thay thế các loại vùng chứa tiêu chuẩn cho các loại Qt trong tương lai. Nó cũng dường như với tôi rằng Qt đã thay đổi 'tâm trí của nó về cách làm việc. Có sử dụng để được một sử dụng-chỉ-Qt-chức năng-cho-tất cả mọi thứ tư duy cho trong khi ngày nay họ nói: sử dụng chức năng tiêu chuẩn, nơi đó là tốt nhất và chức năng Qt nơi đó là tốt nhất. –

1

Qt thường cung cấp các cách sử dụng mọi thứ khác nhau để người lập trình có thể sử dụng kiểu được sử dụng để sử dụng.

Trường hợp Simmilar là với loại trình lặp. Bạn có thể sử dụng kiểu tiêu chuẩn được sử dụng trong Thư viện chuẩn hoặc các trình vòng lặp kiểu Java. Đó là để thuận tiện cho người dùng.

Lý do cho cbegin và constBegin là simillar. Ngoài ra nếu tài liệu không nhà nước khác biệt, sau đó không có sự khác biệt.

Như bạn đã nhận thấy. constBegin là QtStyle tinh khiết và cbegin là kiểu STL.

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