警告 C4267:“初始化”:从“size_t”转换为“UINT”

S.S*_*hil 2 c++ visual-studio-2010

我正在将 VS2010 中的应用程序升级到 64 位平台。我想解决以下警告,正确的方法是什么?我不想更改 MyVar 的数据类型,因为该变量在许多函数中用作参数。如果我想将“strlen(Mystring)”的输出转换为 const int 那么该怎么做。

const int aSel = 40;
UINT MyVar= aSel - strlen( Mystring );//Warning C4267
Run Code Online (Sandbox Code Playgroud)

Mar*_*ica 5

您有多种选择:

  1. 忽略全局警告 - 我真的不推荐这个。在某些时候你会遇到一个4GB+1的“东西”,分配给UINT,然后截断。

  2. 忽略此特定行上的警告,并说明为什么这是安全的。这对我来说有点代码味道,而且很吵,而且不便携。

  3. 更改 的类型MyVar。你说你不想这样做。在这种特殊情况下,这是合理的,但事后看来MyVar几乎肯定应该被声明为size_t

  4. 静态投射: auto MyVar = static_cast<UINT>(aSel - strelen(MyString));.

我想我更喜欢更改 的类型MyVar,但如果这确实需要太多工作,那么 static_cast 可能是最好的。(不要使用 c 风格的强制转换 - 你想明确表明你正在执行 static_cast 而不是 reinterpret_cast。)