相关疑难解决方法(0)

size_t总是未签名?

标题:size_t总是无符号的,即for size_t x,x总是>= 0

c++ standards

59
推荐指数
4
解决办法
3万
查看次数

将负整数转换为较大的无符号整数

我遇到过执行以下转换的代码:

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); // ???
Run Code Online (Sandbox Code Playgroud)

基本上,我应该担心像编写代码一样

static_cast<unsigned long>(-1L)
Run Code Online (Sandbox Code Playgroud)

过度

static_cast<unsigned long>(-1)
Run Code Online (Sandbox Code Playgroud)

c++ size casting

11
推荐指数
2
解决办法
8437
查看次数

标签 统计

c++ ×2

casting ×1

size ×1

standards ×1