2011-09-07 38 views
12

Stavo correggendo un altro bug in qualche codice e ho trovato un codice che avrei pensato fosse un bug; tuttavia, questo codice viene compilato sotto gcc 4.4, 4.5 e 4.6 e sembra funzionare come "previsto". Qualcuno può dirmi se questo è valido C++?ritorno di valore assegnato al riferimento const

Se questo è C++ valido, qualcuno sa la logica alla base di questo essere legale?

+3

Il razionale canonico è delineato qui: [GotW # 88: Un candidato per il "più importante const"] (http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for- il-più-importante-const /). – ildjarn

+0

Inoltre, lo standard che supporta questo C++ legale è in C++ 03 §12.2/5. – ildjarn

+0

Grazie, ho imparato un po 'di C++ oggi. Ha senso, ma non l'avevo mai usato prima e sapevo che non era permesso tornare a un riferimento non const. – graphicsMan

risposta

24

Sì, questo è legale C++. Formare un riferimento-a-const a un temporaneo estende la durata del temporaneo alla durata del riferimento.

-1

Penso che sia ancora necessario fare attenzione. Ho un caso in cui g ++ - 4.9 con C++ 11 e tipi Eigen complicati non rispetta questo (cancella i dati nel temporaneo restituito anche se si suppone che la sua durata sia estesa). Quindi, anche se potrebbe essere legale, dovrebbe essere contrassegnato come dubbia a meno che non ci sia una buona ragione per farlo.

Inoltre, dato C++ 11 DEVE allocare il temporaneo nel sito di chiamata se restituito dal valore la sua utilità è forse inferiore a quello che era in passato se si utilizza lo standard più recente.

Problemi correlati