1. ホーム
  2. c++

[解決済み] メソッドチェイニングにおけるC++の実行順序

2022-05-15 21:15:01

質問

このプログラムの出力は?

#include <iostream> 
class c1
{   
  public:
    c1& meth1(int* ar) {
      std::cout << "method 1" << std::endl;
      *ar = 1;
      return *this;
    }
    void meth2(int ar)
    {
      std::cout << "method 2:"<< ar << std::endl;
    }
};

int main()
{
  c1 c;
  int nu = 0;
  c.meth1(&nu).meth2(nu);
}

です。

method 1
method 2:0

なぜ nu が1でないのは meth2() が始まるか?

どのように解決するのですか?

評価順序が指定されていないためです。

あなたが見ているのは numain に評価されます。 0 に評価される前に meth1 が呼び出されます。これが連鎖の問題点です。私はそれをしないことをお勧めします。

単純明快で、読みやすく、理解しやすい素敵なプログラムを作ればいいのです。

int main()
{
  c1 c;
  int nu = 0;
  c.meth1(&nu);
  c.meth2(nu);
}