如何绕过警告"rvalue用作左值"?

Roo*_*kie 7 c++ directx visual-c++

我正在使用本教程,但是当我从中编译代码时:

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
);
Run Code Online (Sandbox Code Playgroud)

我明白了:

警告C4238:使用非标准扩展:用作左值的类rvalue

没有额外的代码行,这样做的正确(无警告)方法是什么?

另外,我想知道这行代码有多糟糕?如果它运作正常,它为什么甚至会发出警告?还是......?

Ben*_*ley 16

你正在拿一个临时的地址.你不能这样做.事先声明你的向量:

D3DXVECTOR3 a(0.0f, 10.0f, 0.0f)
            ,b(0.0f, 0.0f, 0.0f)
            ,c(0.0f, 0.0f, 1.0f);
D3DXMatrixLookAtLH(&matView, &a, &b, &c);
Run Code Online (Sandbox Code Playgroud)

请注意,我忽略了您的"没有额外的代码行?" 要求,因为这是一个愚蠢的要求.

  • 特别是因为您可以通过删除换行符来避免这个问题! (5认同)
  • `s/stupid要求/请求不如写正确的代码/ g`重要 (3认同)
  • 希望我能分别给出这个答案的两个部分. (3认同)
  • `s /请求不如写正确的代码/愚蠢的要求/ g`重要 (3认同)