Здравствуйте, ydab, Вы писали:
Y>Здравствуйте, Кодт, Вы писали:
К>>Вызывающая сторона выделяет (на стеке) память под возвращаемый объект и передаёт указатель на неё как неявный параметр.
Y>А если обьект уже существует(на стеке)?
Y>Y>void proca()
Y>{
Y> myStruc ms;
Y> ms = procb();
Y>}
Y>
Y>значит procb(); ето procb(myStruc* param); ?
Есть две разновидности RVO — экономия на копировании в return local_var и экономия на копировании T var = f()
В твоём примере объект ms уже создан, поэтому будет выполнено присваивание.
Впрочем, компилятор может "догадаться", что если myStruc это POD, то инициализация и присваивание сработают одинаково.
А вот здесь
void proca()
{
myStruc ms1 = procb(); // допускается RVO
myStruc ms2 (procb()); // явно указано, что используется конструктор копирования
}