我遇到了以下代码转换:
static_cast<unsigned long>(-1)
据我所知,C++标准定义了将有符号整数值转换为无符号整型的结果(参见:如果将负值分配给无符号变量会发生什么?)。
我对上述代码的担忧是源类型和目标类型可能具有不同的大小,这是否会影响结果。编译器会在进行强制类型转换之前扩大源值类型吗?它会将其转换为相同大小的无符号整数,然后再进行扩大吗?还是其他一些操作?
为了用代码澄清这个问题,
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)