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



我是C++的初学者,所以这个问题可能看起来很傻。请幽默我!

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

我假设+/-基本上只是告诉编译器下一个是数字,这是正确的吗?

否。

CCD_ 3和CCD_。对于数字操作数,一元减号运算符会更改右手运算符的符号,而一元加号运算符不会更改符号。

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

为什么我要使用它而不是static_cast?

可键入的字符更少。如果这对你有吸引力,那么也许你会把它用于这个目的。如果不是,那么也许您应该使用静态强制转换。

您在该页面上看到的+符号被称为";一元加";操作人员你可能应该阅读这里的算术运算符,以更好地了解正在发生的事情。

该页面有以下关于一元加号的内容:

内置的一元加号运算符返回其操作数的值。它不是no-op的唯一情况是当操作数具有整数类型或非范围枚举类型(通过整数提升而更改(时,例如,它将char转换为int,或者操作数进行左值到右值、数组到指针或函数到指针的转换

二进制plus(即有两个操作数的情况(不同,一元plus是一个在实践中使用的不太常见的运算符,但要明确的是,它没有什么特别的地方。与其他算术运算符一样,它可能会过载,这意味着很难说"通用的";关于它的行为。你需要知道它的使用背景,才能预测它将要做什么。首先要对各种可用的运营商有一个明确的了解,然后再往下看这个具体的例子。

最新更新