后缀(或后缀)U,UL,ULL表示负常数

时间:2013-11-13 00:40:42

标签: c++ casting unsigned

在C ++中使用无符号后缀作为负常量是不错的做法?

例如,使用是否安全,

foo(-1ull);

而不是

foo(unsigned long long(-1));

1 个答案:

答案 0 :(得分:3)

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

-(unsigned long long) 1

但不是

(unsigned long long) -1

(虽然两者最终产生相同的结果)。

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

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