operator <- 在 C++ 中做什么?

What does operator <- do in c++?

阅读很长的函数会很有趣!

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;
  }
};

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

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

工作原理如下:

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

代码实际上是:

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

即c++ 中没有左箭头运算符 <- .

很简单,"less than negative X"。

if (b < -x)

1000 行后我也有点斜眼了!

What does operator <- do in c++?

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

如其他答案中所述,实际上应用了两个运算符函数:

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