繁体   English   中英

运算符“ +”是一元还是二进制?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM