【问题标题】:substituting positive signed variables to unsigned variables将正符号变量替换为无符号变量
【发布时间】: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(++) 标准的理解是,在上述情况下没有必要明确声明为无符号,但我不确定在某些情况下是否可能有一些额外的任务需要从有符号转换为无符号,或者当替换的有符号变量在目标无符号变量的范围内时,它是否总是完全相同的可执行文件。

【问题讨论】:

  • 没有必要,除非它对模板实例化或重载解决很重要。
  • 如果它太大,那么任何体面的编译器都会让你知道它。

标签: c++ c variables


【解决方案1】:

转换结果不会有实际差异,隐式和显式转换做同样的事情。显式转换的优点,最好是 C++ 中的static_cast,是清晰的:如果您编写显式转换,没有人需要怀疑您是否意外更改了签名。我会认为 3) 和 4) 一样好。

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2022-06-15
    • 1970-01-01
    • 2019-02-08
    • 2010-10-11
    相关资源
    最近更新 更多