Я использую this tutorial, но когда я скомпилировать код из него:Как обойти предупреждение «rvalue используется как 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
);
я получаю:
предупреждение C4238: нестандартное расширение используется: класс RValue, используемый в качестве Lvalue
Каков правильный (безответный) способ сделать это без дополнительных строк кода?
Кроме того, мне интересно, что так плохо в этой строке кода? Почему он даже дает предупреждение, если он работает нормально? Или это ...?
Факт в том, что вы не можете принять адрес временного (rvalue). 'operator &' * * нуждается в lvalue. Предупреждение правильно описывает это. Однако, практически говоря, код в порядке, так как временные записи будут жить до конца полного выражения (вызов функции). – Xeo
Он дает предупреждение, потому что код не переносится. У вашего компилятора есть нестандартное расширение, которое позволяет это; другие компиляторы могут его отклонить. –
Плохая вещь в том, что в следующий раз вы случайно сделаете «matView» также временным. – lapk