1

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

例如,使用是否安全,

foo(-1ull);

代替

foo(unsigned long long(-1));
4

1 回答 1

3

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

-(unsigned long long) 1

但不像

(unsigned long long) -1

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

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

但是让我们假设我理解你试图通过你的第二个变体说什么。在这种假设下,两种变体都做同样的事情,因此您可以根据个人喜好或编码标准使用其中任何一种。第一个显然更短。

于 2013-11-13T00:43:58.857 回答