Sto utilizzando this tutorial, ma quando compilo il codice da esso:Come aggirare l'avviso "rvalore usato come lvalue"?
D3DXMatrixLookAtLH(
&matView,
&D3DXVECTOR3(0.0f, 10.0f, 0.0f), // warning C4238
&D3DXVECTOR3(0.0f, 0.0f, 0.0f), // warning C4238
&D3DXVECTOR3(0.0f, 0.0f, 1.0f) // warning C4238
);
ottengo:
C4238 di avviso: estensione non standard utilizzata: classe rvalue utilizzato come lvalue
Qual è il modo corretto (senza avvisi) per farlo senza righe di codice aggiuntive?
Inoltre, mi chiedo cosa c'è di male in quella riga di codice? Perché dà anche un avvertimento se funziona bene? O lo fa ...?
Il fatto è che non puoi prendere l'indirizzo di un temporaneo (valore). 'operator &' * ha bisogno di * un lvalue. L'avvertimento sottolinea correttamente questo. Comunque, in pratica, il codice va bene, poiché i temporari vivranno fino alla fine dell'espressione completa (la chiamata di funzione). – Xeo
Fornisce l'avviso perché il codice non è portatile. Il tuo compilatore ha un'estensione non standard che lo consente; altri compilatori potrebbero rifiutarlo. –
La cosa brutta a questo proposito è che la prossima volta farai in modo che anche matView sia temporaneo. – lapk