在 C++ 中对负常量使用无符号后缀是好习惯吗?
例如,使用安全吗,
foo(-1ull);
代替
foo(unsigned long long(-1));
最佳答案
它并没有真正用于“负常数”。 C++ 中的常量(文字)始终是非负数。因此,您在这里得到的是文字 1ull
,前面带有一元 -
运算符。这意味着您的第一个变体的确切语义可以直接表示为
-(unsigned long long) 1
但不像
(unsigned long long) -1
(虽然最后两者产生相同的结果)。
顺便说一句,你写的第二个变体在句法上是不正确的。 “Multiword”类型名称不能用于函数式转换。 usigned(-1)
是合法的,但 unsigned int(-1)
不是。 unsigned long long(-1)
也是非法的。
但让我们假设我理解您试图通过第二个变体表达的意思。在这种假设下,两种变体做同样的事情,因此您可以使用其中一种,具体取决于个人偏好或编码标准。第一个显然更短。
关于c++ - 负常量的后缀(或后缀)U、UL、ULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19943026/