c++ - 负常量的后缀(或后缀)U、UL、ULL

标签 c++ casting unsigned

在 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/

相关文章:

c++ - For 循环永远持续下去

c# - 需要从 linq 检索 Tablet>

c# - 将整数转换为字节但不溢出

c - 是否保证将 -1 分配给无符号类型会产生最大值?

c++ - WTL CListViewCtrl getSelectedItem 导致我断言失败

c++ - cmake如何找到包?

c++ - 如何在 C++ 中将加载到内存中的图像文件转换为 ID2D1Bitmap

casting - 如何在多态中使用boost::smart_ptr?

c++ - C++中的无符号关键字

opengl - GLSL 中的(无符号)字节