[英]is the operator '+' unary or binary?
在阅读此文章似乎运营商+是一元的。 那个怎么样。 根据我的理解,一元运算符是一种不依赖于另一个变量的运算符,例如++ a或a--。 变量“ +”如何一元。 我以为是二进制的? 如果有人能解决这个问题,我将不胜感激。
+
是一元和二进制运算符。 一元+
形式( +a
)强制将操作数评估为数字或指针,而二进制形式+
形式( a + b
)是加法运算。
一元+
通常与一元-
相反; 将其应用于任何数值将不会更改它。 ( +1 == 1
)但是,它确实有一些用途,包括强制将数组衰减为指针:
template <typename T> void foo(const T &) { }
void test() {
int a[10];
foo(a); // Calls foo<int[10]>()
foo(+a); // Calls foo<int*>()
}
( 演示 )
-
和*
运算符的处理相同。 您有-a
(否定)和a - b
(减法); *a
(指针取消引用)和a * b
(乘法)。
您对两个版本的过载不同。 对于通过成员函数的重载:
public:
T operator+() const; // Unary
T operator+(const U &) const; // Binary
与其他任何运算符重载一样,两种形式都可以返回与其封闭类型不同的值。 例如,您可能有一个字符串类,其operator+()
返回数字类型。 这将符合一元+
其操作数评估为数字的约定。
您也可以将这些运算符重载为自由函数:
T operator+(const U &); // Unary, called on type U and returns T.
T operator+(const U &, const V &); // Binary, called on types U and V and returns T.
+ a中的一元+定义为对一元-(-a)的补充。 它是“默认值”,因此即使使用过,实际上也不经常使用。 但是,它可以与引用类的变量一起使用,在其中可以重载它以具有特定于类的含义。 因此,这并非完全没有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.