在 C++ 中对负常量使用无符号后缀是一种好习惯吗?
例如,使用是否安全,
foo(-1ull);
代替
foo(unsigned long long(-1));
它并没有真正用于“负常数”。C++ 中的常量(文字)总是非负的。因此,您在这里所拥有的是文字,前面1ull
带有一元运算符。-
这意味着您的第一个变体的确切语义可以直接表示为
-(unsigned long long) 1
但不像
(unsigned long long) -1
(尽管两者最终产生相同的结果)。
顺便说一句,您所写的第二个变体在语法上是不正确的。“多字”类型名称不能用于函数式类型转换。usigned(-1)
是合法的,但unsigned int(-1)
不是。unsigned long long(-1)
也是非法的。
但是让我们假设我理解你试图通过你的第二个变体说什么。在这种假设下,两种变体都做同样的事情,因此您可以根据个人喜好或编码标准使用其中任何一种。第一个显然更短。