Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > возврат объекта по значению |
Автор: GoldFinch 28.7.2009, 12:43 |
компилятор MSVC есть метод Foo Bar::foo(); // class Foo {int x,y,z;}; как будет происходить возврат объекта класса Foo по значению? т.е. где будет жить объект ( очевидно в стеке ) , кто выделит под него место, и т.п. |
Автор: azesmcar 28.7.2009, 12:51 |
Скорее всего никак, сработает http://en.wikipedia.org/wiki/Return_value_optimization/http://msdn.microsoft.com/en-us/library/ms364057(VS.80).aspx Это temporary object. Сработает копирующий конструктор класса/структуру (для не POD типов) и копия будет возвращена. да. компилятор сделает все необходимое. |
Автор: GoldFinch 28.7.2009, 13:15 |
я имел ввиду, вызывающий код, или вызываемая функция --------- реверсирование показало, что реально компилится Foo* Bar::foo(Foo*); но я не очень уверен в этом результате |
Автор: azesmcar 28.7.2009, 13:18 |
Это уже не относится именно к C++, как он сгенерирует зависит от компилятора. это тоже зависит от функции, если функция будет встроена то там вообще вызова функции не будет. |
Автор: Rififi 28.7.2009, 22:54 |
как будет происходить возврат объекта класса Foo по значению? в новом стандарте временный объект, созданный в функции, "переедет" в возвращаемый (move semantic) а пока как обычно, возврат копии через конструктор копирования |
Автор: jonie 28.7.2009, 23:59 |
если не ошибаюсь в win64 эта штука жить в стеке уже не будет, а будет жить в регистрах... |