【问题标题】:Postfix (or suffix) U, UL, ULL for negative constants负常数的后缀(或后缀)U、UL、ULL
【发布时间】:2013-11-25 10:04:00
【问题描述】:

在 C++ 中对负常数使用无符号后缀是一种好习惯吗?

例如,使用安全吗,

foo(-1ull);

而不是

foo(unsigned long long(-1));

【问题讨论】:

  • 正如 AndreyT 指出的那样, foo(unsigned long long(-1)) 在语法上是错误的。它应该是 foo((unsigned long long)(-1))。

标签: c++ casting unsigned


【解决方案1】:

它并没有真正用于“负常数”。 C++ 中的常量(文字)总是非负的。因此,您在这里拥有的是文字 1ull,前面带有一元 - 运算符。这意味着您的第一个变体的确切语义可以直接表示为

-(unsigned long long) 1

但不像

(unsigned long long) -1

(尽管最终两者产生相同的结果)。

顺便说一句,您写的第二个变体在语法上不正确。 “多字”类型名称不能用于函数式类型转换。 usigned(-1) 是合法的,但 unsigned int(-1) 不是。 unsigned long long(-1) 也是非法的。

但是让我们假设我理解你的第二个变体试图表达的意思。在这种假设下,两种变体都做同样的事情,因此您可以使用其中任何一种,具体取决于个人偏好或编码标准。第一个显然更短。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 2011-05-21
    • 2023-03-26
    • 2012-07-03
    • 2012-06-26
    • 2015-06-21
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多