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

Reply via email to