возвращаемое значение в качестве аргумента функции - PullRequest
2 голосов
/ 21 мая 2011

Я уже публиковал подобный вопрос до , почему мой локальный объект уничтожен дважды? , но я запутался в другом пункте.

вот программа:

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 Ответ

2 голосов
/ 21 мая 2011
AT func(AT at)
{
    return at;
}

Вероятно, некоторая оптимизация компилятора.

Ат создается не только для последующего уничтожения. Вместо этого аргумент func используется для непосредственного создания аргумента func2, как если бы вы вызывали func2 (at);

...