2015-09-03 5 views
5

Qt 5.0 introdotto metodi iteratore cbegin() e cend() nelle diverse classi contenitore come QList o QMap.CBEGIN()/CEND() vs constBegin()/constEnd()

Ma ci sono anche i metodi constBegin() e constEnd() in quelle classi.

Tutti questi metodi sono const e restituiscono uno stile STL const_iterator.

  • fare cbegin()/cend() avere la stessa funzionalità di constBegin()/constEnd()? Per me sembra così, ma nulla è indicato nei documenti di QList, QMap o container classes.
  • C'è uno scenario in cui si dovrebbe usare cbegin()/cend() anziché constBegin()/constEnd() o viceversa?
+2

Controllare la sorgente, 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), ecc. (TL; DR: sono identici) – peppe

+0

@peppe Buon punto. Ma quando non è dichiarato nei documenti che sono identici, chi garantisce che rimarranno identici in futuro? –

+0

Che un cambiamento comportamentale potrebbe infrangere così tanto codice che è impossibile che accada. – peppe

risposta

9

cbegin() e cend() dove introdotto per la compatibilità con contenitori della libreria standard, che contengono tutti tali funzioni dal C++ 11.
Qt vuole solo mantenere l'interfaccia simile alla libreria standard. constBegin() ecc. Sono solo versioni precedenti (Qt le ha aggiunte prima che venisse rilasciato C++ 11). Non c'è differenza nel loro utilizzo.

Vorrei usare constBegin() e constEnd() in quanto sono più espliciti e "stile Qt", ma solo le mie preferenze personali. cbegin()/cend() potrebbe essere utilizzato da alcuni algoritmi implementati per contenitori standard (da qui la loro esistenza in Qt - aiutano a riutilizzare del codice). Usali se ti aspetti che a un certo punto ti piacerebbe riutilizzare il tuo codice al di fuori di Qt.

+1

Uso di cbegin et al. rende più facile sostituire i tipi di contenitori standard per i tipi Qt in futuro. Mi sembra anche che Qt abbia cambiato idea su come fare le cose. In passato c'era solo una mentalità di Qt-funzionalità-per-tutto per tutto, mentre oggi dicono: usa la funzionalità standard dove è meglio e la funzionalità Qt dove è meglio. –

1

Qt in genere fornisce spesso diversi modi di utilizzare le cose, in modo che i programmatori possano utilizzare lo stile che sono abituati a utilizzare.

Il caso simile è con il tipo di iteratore. È possibile utilizzare lo stile standard utilizzato nella libreria standard o iteratori di stile Java. È per comodità dell'utente.

Il motivo per cbegin e constBegin è simillar. Anche se la documentazione non indica la differenza, allora non c'è differenza.

Come hai notato. constBegin è puro QtStyle e cbegin è in stile STL.

Problemi correlati