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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.92
Bers
Заблокирован
14.05.2012, 22:00     Возвращение ссылки на локальный объект #1
Цитата Сообщение от 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++ Builder
C++ Возвращение ссылки или указателя на закрытый элемент класса.
C++ Локальный указатель на локальный строковый литерал
C++ Возвращение ссылки на указатель использование её как левостороннего значения
C++ Возвращение ссылки на локальную переменную
Возвращение значения в функции, ссылки, вычислить корни квадратного уравнения C++
Разъясните ситуацию с возвратом объекта или ссылки на объект C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
Нарушитель
6954 / 5192 / 256
Регистрация: 10.12.2010
Сообщений: 22,768
Записей в блоге: 17
15.05.2012, 01:52     Возвращение ссылки на локальный объект #41
ссылка не валидная но рабочая стек чаще всего не затирается
Ага целую тему сегодня из-за этого мозолили...Определить состояние потока TThread
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,056
Записей в блоге: 10
Завершенные тесты: 1
15.05.2012, 01:58     Возвращение ссылки на локальный объект #42
Цитата Сообщение от Bers Посмотреть сообщение
В третий раз задаю этот вопрос: для чего может быть нужно возвращать ссылку на локальный или временный объект?
Понятия не имею.

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

Цитата Сообщение от Bers Посмотреть сообщение
Он пропускает некорректный код.
И где же он там некорректный? Укажи.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
15.05.2012, 02:47     Возвращение ссылки на локальный объект #43
Цитата Сообщение от lazybiz Посмотреть сообщение
Да что ты говоришь. Посмотри на результат выполнения этой программы, и как следует изучи ее:
Не увидел почему то до этого данного сообщения. Так вот, Вы создаете ссылку на статический объект и называете его глобальным? Вы не можете к нему обратиться непосредственно по имени, кроме как в функции, где он объявлен, о какой глобальности может идти речь? И мы обсуждаем C++ а не ассемблер.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16937 / 5342 / 328
Регистрация: 30.03.2009
Сообщений: 14,363
Записей в блоге: 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
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,056
Записей в блоге: 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++ Возврат указателя на локальный объект
Возвращение const ссылки на временный объект C++

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

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

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