Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 6
1

Возвращение ссылок с const

27.07.2016, 10:41. Показов 1208. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Объясните, пожалуйста, зачем делать возвращаемое значение из функции ссылкой с const, я понимаю, например, при передаче в функцию const &, чтобы не изменить передаваемую строчку или объект и т.д., но, а возвращать зачем как const &? то же с возвращением константных указателей и const ... *.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2016, 10:41
Ответы с готовыми решениями:

Возвращение const ссылки на временный объект
Добрый вечер, #include <iostream> using namespace std; struct Point { int _x; int _y; };

int const * const foo(const int* param) const - разъясните значение квалификаторов
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ?...

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

char operator[](unsigned short offset) const; // что означает const?
Собстенно вопрос уже озвучен :).

5
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.07.2016, 10:46 2
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от osl Посмотреть сообщение
я понимаю, например, при передаче в функцию const &, чтобы не изменить передаваемую строчку или объект
все правильно.
продолжайте линию своей логики:

что бы, например, при возврате из функции не изменили
возвращаемую строку или объект.


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

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

вы возвращаете константную ссылку.
читать можно, изменить - нельзя.

(на самом деле можно. но это грязные хаки)
4
257 / 234 / 185
Регистрация: 02.04.2016
Сообщений: 898
27.07.2016, 11:19 3
http://www.e-reading.club/chap... e_CPP.html
И следующее правило тоже прочтите)

Добавлено через 10 минут
Вообще очень советую эту книгу, если основы знаете
1
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
27.07.2016, 15:14 4
Цитата Сообщение от osl Посмотреть сообщение
возвращать зачем как const &?
Вообще, чтобы вернуть ссылку нужно либо принять ссылку, либо иметь внутри (глобальную и др. внешние области видимости не рассматриваем, как и ссылки на объекты в динамической памяти) статическую переменную.
Остроты к ситуации добавляет возможность использовать вызов как rvalue в выражениях. В присваивании например, это выглядит просто и наглядно. Вот искусственный пример, но простой и зрелищный:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
int & ret_ref(int & a)
{
return a;
}
int main(int argc, char* argv[])
{
int a = 1;
ret_ref(a) = 3;
cout<<a<<endl;//3
system("pause");
return 0;
}
Конечно если бы функция возвращала константную ссылку это не было бы возможно. И конечно, константные ссылки используются не для изменения переменной во внешней области. Это касается не только возвращаемого значения, а и передачи в качестве аргумента. То есть, когда нужно избежать копирования при передаче и возврате, можно передать по указателю на константу. Но чтобы чувствовать себя белым человеком (не разыменовывать каждый раз и не проверять на NULL nullptr) передают константную ссылку.
0
257 / 234 / 185
Регистрация: 02.04.2016
Сообщений: 898
27.07.2016, 15:18 5
kachetkar, Что как?
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
27.07.2016, 15:19 6
kachetkar, нормально. Как сам?
3
27.07.2016, 15:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2016, 15:19
Помогаю со студенческими работами здесь

Что это bool operator== (const CLASS&) const;
Что это? class CLASS { public: bool operator== (const CLASS&amp;) const; ...

Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения
const int Counter(const TSNum *Start) { int c=0; while(Start!=NULL){Start=Start-&gt;next;} ...

Ошибка: Cannot convert 'char const[18]' to 'const wchar_t *'
Unit1.cpp(59): E2034 Cannot convert 'char const' to 'const wchar_t *' Full parser context ...

Модификатор const для параметра функции не const?
void foo(const int N) { int Arr; //&lt;-- ??? } В clang это работает. В VisualStudio 2015 нет.

Cannot convert 'const wchar_t *' to 'const char *'
HMODULE hMod=GetModuleHandle(NULL); if(!hMod) { } HRSRC...

const& и const* в имени функции
Объясните пожалуйста что значит const&amp; и const* в имени и параметрах функции(пример из...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru