【发布时间】:2013-09-03 23:42:42
【问题描述】:
警告:在 C++11 [-Wnarrowing]
我无法弄清楚为什么我从 MinGW 编译以下代码时收到此警告:
unsigned stride = 3;
D3DVERTEXELEMENT9 NORMALELEMENT =
{ 0, stride * sizeof(gs_scalar), D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 };
if (useNormals) stride += 3;
它抱怨那些大括号内的stride * sizeof(gs_scalar)(gs_scalar 是float),但我看不出这是一个缩小转换,因为sizeof 返回字节数。我尝试将 stride 的数据类型更改为 WORD、DWORD、CHAR 等所有类型,但我不断收到相同或类似的警告。
【问题讨论】:
-
使用大括号初始化可以防止在 c++11 中缩小转换。如果这是您的意图,您是否尝试过将
stride * sizeof(gs_scalar)包含在显式转换中? -
这是 C++11 中的错误,不是警告...