在C ++中使用无符号后缀作为负常量是不错的做法?
例如,使用是否安全,
foo(-1ull);
而不是
foo(unsigned long long(-1));
答案 0 :(得分:3)
对于负常数"它并未真正使用" C ++中的常量(文字)总是非负的。所以,你在这里有文字1ull
,前面有一元-
运算符。这意味着您的第一个变体的确切语义可以直接表示为
-(unsigned long long) 1
但不是
(unsigned long long) -1
(虽然两者最终产生相同的结果)。
顺便说一句,你写的第二个变体在语法上是不正确的。 "多字"类型名称不能用于函数式转换。usigned(-1)
是合法的,但unsigned int(-1)
不合法。 unsigned long long(-1)
也是非法的。
但是,让我们假设我理解你试图用你的第二个变体说的话。在这种假设下,两种变体都做同样的事情,因此您可以使用其中任何一种,具体取决于个人偏好或编码标准。第一个显然是短暂的。