Tôi đang sử dụng this tutorial, nhưng khi tôi biên dịch mã từ nó:Làm thế nào để nhận được xung quanh cảnh báo "rvalue được sử dụng như 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
);
tôi nhận được:
C4238 cảnh báo: mở rộng không chuẩn được sử dụng: lớp rvalue sử dụng như giá trị trái
Cách thích hợp (không cảnh báo) khi thực hiện điều này mà không cần thêm dòng mã?
Ngoài ra, tôi tự hỏi điều gì quá tệ về dòng mã đó? Tại sao nó thậm chí còn đưa ra cảnh báo nếu nó hoạt động tốt? Hay là ...?
Sự thật là bạn không thể lấy địa chỉ tạm thời (rvalue). 'toán tử &' * cần * một giá trị. Cảnh báo phác thảo chính xác điều đó. Tuy nhiên, thực tế nói, mã là tốt, kể từ khi thời gian sẽ sống cho đến khi kết thúc biểu thức đầy đủ (các cuộc gọi chức năng). – Xeo
Nó đưa ra cảnh báo vì mã không di động. Trình biên dịch của bạn có phần mở rộng không chuẩn cho phép nó; các trình biên dịch khác có thể từ chối nó. –
Điều xấu về nó là lần sau bạn sẽ vô tình làm cho 'matView' là tạm thời. – lapk