方法链中的 C 执行顺序

新手上路,请多包涵

该程序的输出:

 #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

为什么当 meth2() 启动时 --- nu 不是 1?

原文由 Moises Viñas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 682
1 个回答

因为未指定评估顺序。

您在 nu main 被评估为 0 甚至在 meth1 c8805f36531c6ae06c21 之前被评估为 —c8805f36531c6ae06c21。这就是链式的问题。我建议不要这样做。

只需制作一个漂亮、简单、清晰、易于阅读、易于理解的程序:

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

原文由 Lightness Races in Orbit 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题