无法理解逗号运算符的工作原理

Ras*_*yak 5 c++

在下面的程序中,我重载了commaoperator.但是,为什么comma operator不考虑这个问题first element/object.

class Point {
  int x, y;
public:
  Point() {}
  Point(int px, int py) 
  {x = px;y = py;}
  void show() {
    cout << x << " ";
    cout << y << "\n";
  }
  Point operator+(Point op2);
  Point operator,(Point op2);
};

// overload comma for Point
Point Point::operator,(Point op2)
{
  Point temp;
  temp.x = op2.x;
  temp.y = op2.y;
  cout << op2.x << " " << op2.y << "\n";
  return temp;
}

// Overload + for Point
Point Point::operator+(Point op2)
{
  Point temp;
  temp.x = op2.x + x;
  temp.y = op2.y + y;
  return temp;
}

int main()
{
  Point ob1(10, 20), ob2( 5, 30), ob3(1, 1);
  Point ob4;
  ob1 = (ob1, ob2+ob2, ob3);//Why control is not reaching comma operator for ob1?
  ob1 = (ob3, ob2+ob2, ob1);//Why control is not reaching comma operator for ob3?
  ob4 = (ob3+ob2, ob1+ob3);//Why control is not reaching comma operator for ob3+ob2?
  system("pause");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我试图了解,运营商,但无法找到解决方案.

  ob1 = (ob1, ob2+ob2, ob3);//Why control is not reaching comma operator for ob1?
  ob1 = (ob3, ob2+ob2, ob1);//Why control is not reaching comma operator for ob3?
  ob4 = (ob3+ob2, ob1+ob3);//Why control is not reaching comma operator for ob3+ob2?
Run Code Online (Sandbox Code Playgroud)

任何帮助赞赏.

Mik*_*our 5

为什么控制没有达到ob1的逗号运算符?

我想你在问,为什么这一行只输出两点:10 60for ob2+ob21 1for ob3.这是因为你只调用逗号运算符两次; 每次,它输出右手参数并忽略其左手参数.

代码行相当于

ob1.operator,(ob2+ob2).operator,(ob3);
Run Code Online (Sandbox Code Playgroud)

明确表示它只被叫了两次.ob1被评估,但操作员不对它做任何事情.


Nik*_* C. 2

它确实达到了。但由于您只打印出参数 of 的值operator,,而从不打印出参数的值this,因此您看不到它被打印出来。