该程序的输出:
#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 许可协议
因为未指定评估顺序。
您在
nu
main
被评估为0
甚至在meth1
c8805f36531c6ae06c21 之前被评估为 —c8805f36531c6ae06c21。这就是链式的问题。我建议不要这样做。只需制作一个漂亮、简单、清晰、易于阅读、易于理解的程序: