Re[3]: c++, calling conventions и возвращаемые значения
От: Кодт Россия  
Дата: 30.05.05 08:40
Оценка:
Здравствуйте, 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()); // явно указано, что используется конструктор копирования
}
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.