在阅读this文章时,似乎运营商+是一元的。那个怎么样。 根据我的理解,一元运算符是一个运算符,它不依赖于另一个变量来操作,如++ a或a--。变量怎么样' +'一元。我以为是二进制?如果有人能清楚这一点,我将不胜感激。
答案 0 :(得分:6)
+
既是一元运算符又是二元运算符。一元+
形式(+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*>()
}
(Demo)
这与-
和*
运营商的处理方式相同。你有-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.
答案 1 :(得分:1)
+ a中的一元+被定义为补充一元 - (-a)。这是“默认”,所以实际上并不经常使用。但是它可以与引用类的变量一起使用,它可以重载以具有类特定的含义。所以它并非完全无用。