Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.92
Bers
Заблокирован
#1

Возвращение ссылки на локальный объект - C++

14.05.2012, 22:00. Просмотров 6332. Ответов 45
Метки нет (Все метки)

Цитата Сообщение от Toshkarik Посмотреть сообщение
Что за бред, приписывайте, пожалуйста, в конце, что это только Ваше мнение. Хоть и бредовое.

C++
1
2
3
4
5
6
int& foo()
{
    int a;
    //: warning C4172: возвращение адреса локальной или временной переменной
    return a;  
}
Компиляторы подобный бред ловят без проблем. Технически препятствий не существует. Назови хоть одну реальную причину, по которой сие разрешено стандартом?
 Комментарий модератора 
Спор родился тут
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2012, 22:00     Возвращение ссылки на локальный объект
Посмотрите здесь:
C++ Возвращение ссылки на локальный объект
Возвращение const ссылки на временный объект C++
Возвращение ссылки из функции C++
C++ Возвращение ссылки на локальную переменную
Локальный объект C++ Builder
C++ Возвращение ссылки или указателя на закрытый элемент класса.
C++ Возвращение ссылки на указатель использование её как левостороннего значения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
7101 / 5278 / 267
Регистрация: 10.12.2010
Сообщений: 23,274
Записей в блоге: 17
15.05.2012, 01:52     Возвращение ссылки на локальный объект #41
ссылка не валидная но рабочая стек чаще всего не затирается
Ага целую тему сегодня из-за этого мозолили...Определить состояние потока TThread
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.05.2012, 01:58     Возвращение ссылки на локальный объект #42
Цитата Сообщение от Bers Посмотреть сообщение
В третий раз задаю этот вопрос: для чего может быть нужно возвращать ссылку на локальный или временный объект?
Понятия не имею.

Цитата Сообщение от Bers Посмотреть сообщение
Я писал об этом чуть выше.
Укажи номер сообщения.

Цитата Сообщение от Bers Посмотреть сообщение
Он пропускает некорректный код.
И где же он там некорректный? Укажи.
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
15.05.2012, 02:47     Возвращение ссылки на локальный объект #43
Цитата Сообщение от lazybiz Посмотреть сообщение
Да что ты говоришь. Посмотри на результат выполнения этой программы, и как следует изучи ее:
Не увидел почему то до этого данного сообщения. Так вот, Вы создаете ссылку на статический объект и называете его глобальным? Вы не можете к нему обратиться непосредственно по имени, кроме как в функции, где он объявлен, о какой глобальности может идти речь? И мы обсуждаем C++ а не ассемблер.
Evg
Эксперт CАвтор FAQ
17463 / 5701 / 361
Регистрация: 30.03.2009
Сообщений: 15,648
Записей в блоге: 26
15.05.2012, 08:43     Возвращение ссылки на локальный объект #44
Цитата Сообщение от Bers Посмотреть сообщение
В третий раз задаю этот вопрос: для чего может быть нужно возвращать ссылку на локальный или временный объект?
Более, чем уверен, что проблема растёт отсюда:

C++
1
2
3
4
5
int& func()
{
  int x;
  return x;
}
Данный код является логически некорректным. Ты хочешь, чтобы стандарт его запретил, потому что компилятор без каких бы то ни было анализов может сразу же выдать ошибку. Тогда возникает другая проблема. Перепишем немного исходный код:

C++
1
2
3
4
5
6
int& func()
{
  int x;
  int &y = x;
  return y;
}
Код делает то же самое, но компилятор уже не может что-то запрещать, потому что нужно выполнить анализ. В итоге из-за желаемого тобой запрета вышла бы несимметрия: вот так нельзя, но если сделать те же яйца, но в профиль, то можно. Авторы посчитали, что логичным поведением будет одинаковое поведение компилятора в одинаковых ситуациях

Добавлено через 1 минуту
Тут было много споров про "статические" переменные. В статье http://www.cyberforum.ru/blogs/18334/blog103.html в разделе 2 я описывал терминологию, упомянул и понятие "статический". Это полезно знать с той точки зрения, что разные авторы под словом "статический" могут подразумевать разные вещи
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
15.05.2012, 11:48     Возвращение ссылки на локальный объект #45
Цитата Сообщение от Toshkarik Посмотреть сообщение
Не увидел почему то до этого данного сообщения. Так вот, Вы создаете ссылку на статический объект и называете его глобальным? Вы не можете к нему обратиться непосредственно по имени, кроме как в функции, где он объявлен, о какой глобальности может идти речь? И мы обсуждаем C++ а не ассемблер
Я не говорю что к такой переменной можно обратиться из вне. Я говорю что под такую переменную память выделяется не в стеке, и что она после выполнения функции никуда не пропадает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2012, 11:52     Возвращение ссылки на локальный объект
Еще ссылки по теме:
C++ Возврат указателя на локальный объект
Возвращение значения в функции, ссылки, вычислить корни квадратного уравнения C++
Ссылки на объект и мультипоточность C++
Сохранение ссылки на объект в векторе C++
Разъясните ситуацию с возвратом объекта или ссылки на объект C++

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

Или воспользуйтесь поиском по форуму:
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
15.05.2012, 11:52     Возвращение ссылки на локальный объект #46
Цитата Сообщение от lazybiz Посмотреть сообщение
Я говорю что под такую переменную память выделяется не в стеке, и что она после выполнения функции никуда не пропадает.
А я и не говорил, что она куда то девается, я лишь сказал, что она является локальной переменной с точки зрения Си/С++.
Yandex
Объявления
15.05.2012, 11:52     Возвращение ссылки на локальный объект
Ответ Создать тему
Опции темы

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