当前位置:  开发笔记 > 编程语言 > 正文

一元加运算符有什么作用?

如何解决《一元加运算符有什么作用?》经验,为你挑选了7个好方法。

一元加运算符有什么作用?我找到了几个定义(这里和这里),但我仍然不知道它将用于什么.它似乎没有做任何事情,但有理由,对吗?



1> Charles Salv..:

实际上,一元加号确实做了一些事情 - 即使在C语言中.它在操作数上执行通常的算术转换并返回一个新值,该值可以是更大宽度的整数.如果原始值是宽度小于的无符号整数int,则它也将更改为signed值.

通常这并不重要,但它可能会产生影响,因此使用一元加号作为一种表示整数为正的"注释" 并不是一个好主意.考虑以下C++程序:

void foo(unsigned short x)
{
 std::cout << "x is an unsigned short" << std::endl;
}

void foo(int x)
{
 std::cout << "x is an int" << std::endl;
}

int main()
{
 unsigned short x = 5;
 foo(+x);
}

这将显示"x是一个int".

因此,在这个示例中,一元加上创建了一个具有不同类型签名的新值.


如果你编写的代码在给定short和int比较相等的情况下产生给定的结果,那么你可能有不同的问题

2> Jeffrey Hant..:

如果你觉得有必要的话就会超载; 对于所有预定义类型,它基本上是一个无操作.

无操作一元算术运算符的实际用途非常有限,并且倾向于与在算术表达式中使用值的结果相关,而不是与运算符本身相关.例如,它可用于强制从较小的整数类型扩展到int,或确保表达式的结果被视为rvalue,因此与非const引用参数不兼容.但是,我提出,这些用途更适合编码高尔夫而不是可读性.:-)


事实并非如此,如下面的几个例子所示.
好的,我会买它有一些用途,但下面讨论的大多数用法都涉及这是一个使用no-op运算符构建的数值表达式:例如,提升为`int`并导致rvalue是表达式的效果,而不是+运算符本身的效果.

3> Claudiu..:

来自K&R第二版:

一元+是ANSI标准的新功能.它被添加为与一元对称 - .


绝对。***这是历史原因。** C ++必须对其进行适应,因此它必须处理重载。

4> bbrown..:

我已经看到它用于清晰,强调正值与负值不同:

shift(+1);
shift(-1);

但这是一个非常弱的用途.答案肯定是超载.


我也是这样做的,特别是在处理像'vec3(+ 1,-1,-1)`这样的向量时

5> AnT..:

内置一元组的一件事+就是将左值变成右值.例如,您可以这样做

int x;
&x;

但你不能这样做

&+x;

:)

PS"重载"绝对不是正确的答案.Unary +继承自C,并且在C中没有用户级别的运算符重载.



6> jkerian..:

一元+完成的主要内容是对小于int的数据类型的int类型的提升.如果您尝试使用std::cout数字数据打印字符数据,这可能非常有用.

char x = 5;
std::cout << +x << "\n";

与...非常不同

char x=5;
std::cout << x << "\n";

它也可以用于重载,但实际上你的重载几乎应该是NOP.



7> Nicu Stiurca..:

如果您需要打印原始字节的数值(例如,存储为char的小数字)以进行调试或出于任何原因,一元+可以简化打印代码.考虑

char c = 42;
cout << c << endl;           // prints "*\n", not what you want in this case
cout << (int)c << endl;      // prints "42\n", ok
cout << +c << endl;          // prints "42\n", much easier to type

这只是一个简单的例子.我相信还有一些时候,一元+可以帮助处理你的字节更像数字而不是像文本.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有