【发布时间】:2014-08-11 19:03:30
【问题描述】:
(在 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 通常更方便,除非它超出正符号的范围。 (例如 3,333,333,333 用于 32 位 int)
有了这个功能,
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(++) 标准的理解是,在上述情况下没有必要明确声明为无符号,但我不确定在某些情况下是否可能有一些额外的任务需要从有符号转换为无符号,或者当替换的有符号变量在目标无符号变量的范围内时,它是否总是完全相同的可执行文件。
【问题讨论】:
-
没有必要,除非它对模板实例化或重载解决很重要。
-
如果它太大,那么任何体面的编译器都会让你知道它。