返回值作为函数参数

时间:2011-05-21 01:59:54

标签: c++ pass-by-value

我在why my local object destroyed twice?之前发布了一个类似的问题,但我对其他问题感到困惑。

这是程序:

class AT
{
public:
    int a;

    AT() { cout<<"construct"<<endl; }

    AT(const AT& at) { cout<<"copy"<<endl; }

    ~AT() { cout<<"destroy"<<endl; }
};

AT func(AT at)
{
    return at;
}

AT func2(AT at)
{
    at.a = 5;
    return at;
}

然后我打电话给:

AT at;
func2(func(at));

输出是:

construct
copy
copy
destroy
copy
destroy
destroy

我想输出中会有4个拷贝和4个破坏,我在func(at)中清楚,复制了参数,并且复制了返回值,并且两个都被破坏了。但是在func2()中,似乎没有复制参数。这是否意味着:如果将参数传递给参数,则不会复制参数?

1 个答案:

答案 0 :(得分:2)

AT func(AT at)
{
    return at;
}

可能是一些编译器优化。

At不会被创建,只会在之后被销毁。 相反,func的参数用于直接创建func2的参数,就像调用了func2(at);