Używam this tutorial, ale kiedy mogę skompilować kod z nią:Jak obejść ostrzeżenie "rvalue used as 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
);
uzyskać:
ostrzeżenie C4238: niestandardowe rozszerzenia używane: class rvalue używany jako lwartości
Jaki jest właściwy (bez ostrzeżenia) sposób wykonania tej czynności bez dodatkowych linii kodu?
Zastanawiam się również, co jest takiego złego w tym wierszu kodu? Dlaczego daje ostrzeżenie, jeśli działa dobrze? Czy to ...?
Faktem jest, że nie można przyjąć adresu tymczasowego (rwartości). 'operator &' * potrzebuje * wartość l. Ostrzeżenie prawidłowo to podkreśla. Jednak praktycznie rzecz biorąc, kod jest w porządku, ponieważ tymczasowe będą działać do końca pełnego wyrażenia (wywołanie funkcji). – Xeo
Daje ostrzeżenie, ponieważ kod nie jest przenośny. Twój kompilator ma niestandardowe rozszerzenie, które na to pozwala; inne kompilatory mogą go odrzucić. –
Złe jest to, że następnym razem przypadkowo sprawisz, że 'matView' będzie tymczasowy. – lapk