Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Jzx
-54 / 3 / 0
Регистрация: 31.12.2017
Сообщений: 198
1

Возврат объекта функцией

06.02.2019, 08:14. Просмотров 992. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class C
{
    int c;
}c1,c2;
 
C func()
{
    return c1;
}
 
int main()
{
    func()=c2;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class C
{
    int c;
}c1,c2;
 
C& func()
{
    return c1;
}
 
int main()
{
    func()=c2;
}
В первом случае функция возвращает объект классового типа по значению, во втором — по ссылке. В чём разница?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2019, 08:14
Ответы с готовыми решениями:

Создание объекта в функции и возврат объекта из нее
Не могу разобраться с ссылками. Возможно ли вернуть из функции объект созданный в стеке при этом...

Возврат функцией массива структур
Пишу программу, которая в зависимости от выбора пользователя считывает информацию о студентах,...

Возврат функцией экземпляра класса
Подскажите, будет ли корректной с точки зрения выделения памяти и всего прочего такая запись:...

Возврат функцией указателя на функцию
Всем привет! У меня возникла такая проблема: класс имеет поле-указатель на функцию. В методе,...

Возврат объекта из функции
Здравствуйте. Написал в Code.Blocks на C++ вот такой код (привожу только часть кода, остальное на...

7
nd2
3099 / 2593 / 1134
Регистрация: 29.01.2016
Сообщений: 8,690
06.02.2019, 08:20 2
При возврате по значению, возвращается временная копия, при возврате по ссылке - сам объект.
0
Jzx
-54 / 3 / 0
Регистрация: 31.12.2017
Сообщений: 198
06.02.2019, 08:31  [ТС] 3
Цитата Сообщение от nd2 Посмотреть сообщение
возвращается временная копия
Получается, что с помощью инструкции func()=c2; я временной копии присвоил объект. Почему компилятор на это не ругается?
0
DrOffset
10927 / 5823 / 1435
Регистрация: 30.01.2014
Сообщений: 9,366
06.02.2019, 08:42 4
Цитата Сообщение от Jzx Посмотреть сообщение
Почему компилятор на это не ругается?
Потому что по стандарту - это корректный код.
0
06.02.2019, 08:42
Jzx
-54 / 3 / 0
Регистрация: 31.12.2017
Сообщений: 198
06.02.2019, 08:49  [ТС] 5
DrOffset, а почему он корректный? Насколько я понимаю, func() в данном случае — это даже не lvalue.
0
DrOffset
10927 / 5823 / 1435
Регистрация: 30.01.2014
Сообщений: 9,366
06.02.2019, 08:54 6
Цитата Сообщение от Jzx Посмотреть сообщение
а почему он корректный?
Вам пункт стандарта нужен? Нет под рукой сейчас. Могу объяснить иначе.
Вот представьте, что у вас есть такой код:
C++
1
foo().bar();
Как думаете, он должен работать?
Если ваш ответ да, то подумайте чем отличается ваш код
C++
1
foo() = c2;
от него? Ведь это тоже самое, что
C++
1
foo().operator=(c2);
Цитата Сообщение от Jzx Посмотреть сообщение
это даже не lvalue.
Верно.
0
Jzx
-54 / 3 / 0
Регистрация: 31.12.2017
Сообщений: 198
06.02.2019, 09:00  [ТС] 7
DrOffset, то есть получается, что в данной инструкции operator= возвращает значение, но не создаёт побочного эффекта в виде присваивания?
0
DrOffset
10927 / 5823 / 1435
Регистрация: 30.01.2014
Сообщений: 9,366
06.02.2019, 09:43 8
Лучший ответ Сообщение было отмечено Jzx как решение

Решение

Цитата Сообщение от Jzx Посмотреть сообщение
то есть получается, что в данной инструкции operator= возвращает значение, но не создаёт побочного эффекта в виде присваивания?
Почему? Присваивание происходит временному объекту.
1
06.02.2019, 09:43
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2019, 09:43

Возврат объекта класса из функции
Имеется следующий код: #include "stdafx.h" #include <iostream> using namespace std; ...

Виртуальная функция и возврат объекта класса
Доброго времени суток! Столкнулся с проблемой. Есть переопределенный оператор умножения в...

Возврат моего объекта List из функции
Ребята, вот есть у меня такой List: template<class T> class List { public: typedef T*...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.