该程序的输出:
#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()
?
nu
,&nu
和c
到堆栈的顺序,然后调用meth1
,推结果到堆栈中,然后调用meth2
,而基于寄存器的调用约定会想加载c
并加载&nu
到寄存器中,调用meth1
,加载nu
到寄存器中,然后调用meth2
。