运算符< - 在c ++中做什么?

时间:2015-10-22 23:03:48

标签: c++ operators

阅读很长的功能非常有趣!

int crazylongfun()
{
  int x = -1;
  foo b = -42;

//... 1000 lines below

  if( b<-x)
  {
    std::printf("How did I get here there is no left arrow operator?\n");
  }

  return 0;    
}

看foo定义

struct foo
{
  int  x;

  foo(int a) : x(a) {}

  operator int() const
  {
    return x;
  }
};

这可以很好地编译并产生所需的输出。允许这种情况的机制是什么?

3 个答案:

答案 0 :(得分:5)

简单地说,&#34;小于负X&#34;。

if (b < -x)

在1000行之后,我也会有点眼睛!

答案 1 :(得分:3)

可以说c ++中的隐式转换运算符是有争议的,例如Are implicit conversions good or bad in modern C++?。当它们被定义时,对于不知道的程序员来说,可能会有非常有趣的语法情境。以上只是一个例子。

这是如何工作的:

Struct foo定义了转换运算符,因此它可以转换为int,这会导致它被隐式转换并与局部变量x进行比较,小于负x。

代码实际上是:

if(int(b)<(-x))

即。在c ++中没有左箭头操作符&lt; -

答案 2 :(得分:3)

  

运算符<-在c ++中做了什么?

它实际上不是一个运算符(与->相比,它是一个)。

正如其他答案中所提到的,实际上已经应用了两个运算符函数:

  1. 一元operator-()对值
  2. 应用否定号
  3. 较少比较operator<()