Richard Heck <[EMAIL PROTECTED]> writes: | Andre Poenitz wrote: | > On Thu, May 31, 2007 at 09:12:56PM +0200, Peter Kümmel wrote: | > | >>> I tried to do something like this so I didn't have the same code in two | >>> places: | >>> QModelIndex & QCitationDialog::getSelectedIndex(QListView *) { | >>> QModelIndexList const selIdx = | >>> availableLV->selectionModel()->selectedIndexes(); | >>> if (selIdx.empty()) | >>> return QModelIndex(); //this is an invalid one. | >>> return selIdx.first(); | >>> } | >>> But that failed: warning: returns reference to temporary. Any ideas how | >>> to avoid this and still return a reference? Or could I return a smart | >>> | >> returning "const QModelIndex &" should be save. But you could also | >> return may value, copying QModelIndex isn't that expensive. The Qt | >> code return often by value, QModelIndex was designed for this. | >> | > Apart from that | > | > QModelIndex & QCitationDialog::getSelectedIndex(QListView *) { | > ... | > if (selIdx.empty()) | > return QModelIndex(); //this is an invalid one. | > | > returns a reference to a temporary, which is useless in any case | > as accessing it will invoke undefined behaviour. | > | Yes, the question was how to avoid doing that and still return a | reference, if there is any such way.
When returning by copy you could give the temporary a name to let the compiler use NRVO. (Optimization technique used by compilers.) -- Lgb