C++:+ 或 - 可以告诉编译器一个值应该是一个 int 吗?

标签 c++ char unsigned static-cast numeric-limits

我是 C++ 的初学者,所以这似乎是一个愚蠢的问题。请逗我开心!

我正在使用 static_cast<int>(numeric_limits<unsigned_char>::min())::max() (根据 this post ),还发现了 here可以在 numeric_limits 之前使用 + 或 - 符号来获得相同的结果。我是否正确地假设 +/- 基本上只是告诉编译器接下来是一个数字?为什么我要使用它而不是 static_cast?

最佳答案

Am I correct in assuming that the +/- is basically just telling the compiler that the next thing is a number?

没有。

+- 只是算术运算符。对于数字操作数,一元减号运算符改变右手运算符的符号,而一元加号运算符不改变符号。

即使操作数是 unsigned char 结果也是 int 的原因是因为所有算术运算符的所有操作数总是转换为 int(如果操作数类型的所有值都不能用 int 表示,则转换为 unsigned int)如果他们的等级较低。这种特殊的转换称为整数提升

Why would I use that as opposed to a static_cast?

输入的字符更少。如果这对您有吸引力,那么也许您会为此目的使用它。如果不是,那么也许您应该改用静态转换。

关于C++:+ 或 - 可以告诉编译器一个值应该是一个 int 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67608374/

相关文章:

c++ - 为什么删除的移动语义会导致 std::vector 出现问题?

c++ - 嵌套 for 循环的奇怪性能问题

c++ - 在头文件中设置常量 char*?

我可以使用下面的代码还是不正确的?

java - Java 缺少无符号原始类型是 Java 平台的特征还是 Java 语言的特征?

c++ - OpenCV 3.4.0 - 未找到 zlibd1.dll

c - 如何使用 scanf 从下一行输入数据中获取输入?

c++ - 使用 mbstowcs_s 将 char* 转换为 wchar_t*

c++ - 如何区分 char 文字和 unsigned int 作为构造函数的参数

c - 为什么 unsigned typeof(var) 不起作用? const typeof(x) 工作得很好,为什么不呢?