【发布时间】:2014-02-14 01:15:14
【问题描述】:
我遇到过执行以下转换的代码:
static_cast<unsigned long>(-1)
据我所知,C++ 标准定义了将有符号整数值转换为无符号整数类型时会发生什么(请参阅:What happens if I assign a negative value to an unsigned variable?)。
我在上面的代码中担心的是源类型和目标类型的大小可能不同,以及这是否会对结果产生影响。编译器会在转换之前扩大源值类型吗?它会改为转换为相同大小的无符号整数然后放大吗?还是别的什么?
用代码澄清一下,
int nInt = -1;
long nLong = -1; // assume sizeof(long) > sizeof(int)
unsigned long res1 = static_cast<unsigned long>(nInt)
unsigned long res2 = static_cast<unsigned long>(nLong);
assert(res1 == res2); // ???
基本上,我应该担心编写类似的代码
static_cast<unsigned long>(-1L)
结束
static_cast<unsigned long>(-1)
【问题讨论】:
-
名词是“整数”。 (积分也是名词......在微积分中,不是 C++)
-
确认!你是对的。太多的 Haskell 编程......
-
我曾经有一个非常相似的问题:stackoverflow.com/q/18303682/2445184