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

时间:2016-01-14 07:13:06

标签: c++ visual-studio-2010

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

$name = $emailContent[0]->name;
$email = $emailContent[0]->email;
$message = $emailContent[0]->message;

2 个答案:

答案 0 :(得分:3)

您有多种选择:

  1. 全局忽略警告 - 我真的不推荐这个。在某些时候,您将遇到4GB + 1"",分配给UINT,并截断。

  2. 忽略此特定行上的警告,并注释为何这是安全的。这对我来说有点代码味道,非常嘈杂,而且不便携。

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

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

  5. 我认为我更喜欢更改MyVar的类型,但如果真的太多了,那么static_cast可能是最好的。 (不要使用c风格的演员表 - 你想明确表示你正在做static_cast而不是reinterpret_cast。)

答案 1 :(得分:0)

在大多数64位编译器实现中,

difference() { polyhedron(points = [ [21.5,51.9,0],[51.9,21.5,0], [-21.5,51.9,0],[-51.9,21.5,0], [-21.5,-51.9,0],[-51.9,-21.5,0], [21.5,-51.9,0],[51.9,-21.5,0], [21.5,51.9,100],[51.9,21.5,100], [-21.5,51.9,100],[-51.9,21.5,100], [-21.5,-51.9,100],[-51.9,-21.5,100], [21.5,-51.9,100],[51.9,-21.5,100] ], faces = [ [0,1,9,8],[2,0,8,10],[3,2,10,11],[5,3,11,13], [4,5,13,12],[6,4,12,14],[7,6,14,15],[1,7,15,9], [0,1,7,6,4,5,3,2],[8,9,15,14,12,13,11,10] ]); polyhedron(points = [ [19,49.4,5],[49.4,19,5], [-19,49.4,5],[-49.4,19,5], [-19,-49.4,5],[-49.4,-19,5], [19,-49.4,5],[49.4,-19,5], [19,49.4,100],[49.4,19,100], [-19,49.4,100],[-49.4,19,100], [-19,-49.4,100],[-49.4,-19,100], [19,-49.4,100],[49.4,-19,100] ], faces = [ [0,1,9,8],[2,0,8,10],[3,2,10,11],[5,3,11,13], [4,5,13,12],[6,4,12,14],[7,6,14,15],[1,7,15,9], [0,1,7,6,4,5,3,2],[8,9,15,14,12,13,11,10] ]); } 是64位。因此,您最好使用size_t类型而不是size_t。这样,它在32位和64位系统上都是安全的。