(在C / C ++中)
//1
int i = 1;
unsigned u = i;
//2
int i = 1;
unsigned u = (unsigned)i;
//3
unsigned u = 1;
//4
unsigned u = 1u;
gcc(4.8)编译器在1,2和3,4之间生成的汇编代码没有区别。在编写实际代码时,(对我来说)使用表单1和3通常更方便,除非它超出了正签名的范围。 (例如32位int的3,333,333,333)
使用此功能,
void mpz_set_ui (mpz_t rop, unsigned long int op)
我用它作为,
mpz_set_ui(num, 3); //or an int variable in place of 3
例如,。
我对当前C(++)标准的理解是,在上述情况下没有必要明确表示为无符号,但我不确定在某些情况下是否可能有一些额外的任务要从有符号转换为无符号,或当替换的有符号变量在目标无符号变量的范围内时,它总是完全相同的可执行文件。
答案 0 :(得分:2)
转换结果没有实际差异,隐式转换和显式转换都做同样的事情。显式强制转换的优点,在C ++中更可取static_cast
,是明确的:如果你编写显式强制转换,没有人需要怀疑你是否在事故中改变了签名。我会认为3)和4)同样好。