【问题标题】:C++: Can a + or - tell the compiler a value should be an int?C++:+ 或 - 可以告诉编译器一个值应该是一个 int 吗?
【发布时间】:2021-05-19 17:48:19
【问题描述】:
我是 C++ 的初学者,所以这似乎是一个愚蠢的问题。请幽默我!
我使用static_cast<int>(numeric_limits<unsigned_char>::min()) 和::max()(根据this post),但也发现here 可以在 numeric_limits 之前使用 + 或 - 号来达到相同的结果。我是否正确假设 +/- 基本上只是告诉编译器接下来的事情是一个数字?为什么我要使用它而不是 static_cast?
【问题讨论】:
标签:
c++
char
unsigned
static-cast
numeric-limits
【解决方案1】:
我是否正确假设 +/- 基本上只是告诉编译器接下来是一个数字?
没有。
+ 和 - 只是人工算子。对于数字操作数,一元减号运算符会更改右手运算符的符号,而一元加号运算符不会更改符号。
即使操作数是 unsigned char,结果也是 int 的原因是因为所有算术运算符的所有操作数总是转换为 int(或者如果操作数类型的所有值都不能用 int 表示,则转换为 unsigned int)如果他们的等级较低。这种特殊的转换称为整数promotion。
我为什么要使用它而不是 static_cast?
输入的字符更少。如果这对您有吸引力,那么也许您会为此目的使用它。如果不是,那么也许您应该改用静态转换。
【解决方案2】:
您在该页面上看到的+ 符号称为“一元加号”运算符。您可能应该阅读算术运算符here 以更好地了解正在发生的事情。
该页面有以下关于一元加号的内容:
内置的一元加号运算符返回其操作数的值。它不是空操作的唯一情况是当操作数具有整数类型或无作用域枚举类型时,通过整数提升来更改,例如,它将 char 转换为 int 或者如果操作数受制于 lvalue-to -rvalue、数组到指针或函数到指针的转换。
与 binary plus 不同(即,您将有两个操作数),unary plus 是一个在实践中使用的不太常见的运算符,但要清楚,有没什么特别的。像其他算术运算符一样,它可以重载,这意味着很难说它的行为是“通用的”。你需要知道它被用来预测它会做什么的上下文。从深入了解可用的各种运算符开始,然后逐步研究这个具体示例。