С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

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

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

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

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

C++
1
2
3
4
5
6
int& foo()
{
    int a;
    //: warning C4172: возвращение адреса локальной или временной переменной
    return a;  
}
Компиляторы подобный бред ловят без проблем. Технически препятствий не существует. Назови хоть одну реальную причину, по которой сие разрешено стандартом?
 Комментарий модератора 
Спор родился тут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2012, 22:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возвращение ссылки на локальный объект (C++):

Локальный объект - C++ Builder
Вместо синусоиды у меня выводиться мусор. Помогите найти ошибку:help: Вот часть кода void __fastcall TForm1::Button2Click(TObject...

Как создать объект оператором new, если имеется только тип указателя на объект, переданный через шаблон? - C++ Builder
Есть шаблон. Точно известно, что его параметр Т это указатель. Как с помощью new создать переменную типа *T ? Код приведенный ниже дает...

Возвращение ссылки на локальный объект - C++
В каком-то коде мельком видел что-то вроде: char& char_stub() { char c; return c; }; int main() {

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

Возвращение ссылки из функции - C++
Привет, я немного не понимаю, почему в следующем коде в строках 16-17 надо возвращать именно ссылку: #include <iostream> #include...

Возвращение ссылки на локальную переменную - C++
Заметил недавно одну интересную вещь. Как вообще работает такой код? Причем коректно. int& func(); int main() { cout << func(); ...

45
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
14.05.2012, 22:05 #2
Не понял, о чем Вы сейчас? К чему этот пример?
Попробую догадаться: А вы считаете что локальная переменная должна существовать все время?
0
Bers
Заблокирован
14.05.2012, 22:13  [ТС] #3
Цитата Сообщение от Toshkarik Посмотреть сообщение
Не понял, о чем Вы сейчас? К чему этот пример?
Попробую догадаться: А вы считаете что локальная переменная должна существовать все время?
Не правильно ты понял. Я считаю, что нет ни одной причины, по которой может понадобится возвращать не_валидные данные. Однако, язык это позволяет. Язык позволяет совершать бессмысленные глупые вещи.

И вроде бы итак понятно, что нет резона совершать глупые вещи:

C++
1
CSome* ptr; ptr->Method(); //trololo
Просто всем на это пофигу. И время от времени кто нибудь стреляет себе в ногу.
Это я называю "раздолбайством".

Ответственный подход: ситуации, которых быть не должно, не должны возникнуть в принципе.

Добавлено через 55 секунд
Цитата Сообщение от ForwardM Посмотреть сообщение
arr[i] == *(arr + i), а i[arr] == *(i + arr)
Тебе об этом сказали ещё в #4 посту
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
14.05.2012, 22:15 #4
Ну а в жизни Вы тоже делаете плохие вещи, которые не стоит делать? Если Вы знаете язык, то не будете делать подобных ошибочных действий.
0
Bers
Заблокирован
14.05.2012, 22:19  [ТС] #5
Цитата Сообщение от Toshkarik Посмотреть сообщение
Если Вы знаете язык, то не будете делать подобных ошибочных действий.
Возможность совершать заведомо глупые вещи на языке делает язык раздолбайским.
А убеждение, что это нормально - делает раздолбаем программиста, который на нем пишет.

Итого: см. начало диалога.
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
14.05.2012, 22:22 #6
Не возможность совершать, а само совершение глупых поступков делает раздолбаем. Если Вы хотите, чтоб за Вами приглядывали, как в дет. саду, то пожалуйста, не используйте данный язык. Но и в дет. саде дети иногда падают и калечатся.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
14.05.2012, 22:32 #7
Bers, а не раздолбайские языки существуют?
0
Bers
Заблокирован
14.05.2012, 22:34  [ТС] #8
Цитата Сообщение от lazybiz Посмотреть сообщение
а не раздолбайские языки существуют?
Бейсик)
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
14.05.2012, 22:37 #9
Все верно, чем язык более совершенен - тем он более могуч и раздолбаней.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
14.05.2012, 23:05 #10
Bers, Evg, как выглядит возвращение ссылки на локальную переменную в описании стандарта и что там об этом говориться?
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
14.05.2012, 23:08 #11
Насколько мне известно undefined behavior, так как после возврата из функции все переменные уничтожаются, и передается адрес на то место, где была переменная, но там уже могут быть совсем другие данные.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
14.05.2012, 23:25 #12
Toshkarik, ты о чем?
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,827
Записей в блоге: 28
14.05.2012, 23:33 #13
Цитата Сообщение от lazybiz Посмотреть сообщение
Bers, Evg, как выглядит возвращение ссылки на локальную переменную в описании стандарта и что там об этом говориться?
Хз, я как-то в Си++ не сильно разбираюсь. Но не думаю, что как-то отдельно говорится. Возвращение ссылки выполняется ровно таким же образом, как и любое другое присваивание ссылки. А тухлой такая ссылка становится тоже на общих правилах: как только время жизни объекта заканчивается, ссылка становится невалидной
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
14.05.2012, 23:55 #14
Цитата Сообщение от lazybiz Посмотреть сообщение
ты о чем?
Я о возвращении ссылки на локальный объект.
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
15.05.2012, 00:19 #15
Бред. Почему функция не может (не должна) возвратить ссылку/указатель на локальную переменную!? Кто-нибудь может на это ответить?
Язык Си/С++ многофункционален. Глупо думать что это недочет разработчиков.

+ если переменная в функции определена как static, то она является глобальной (надеюсь это знает большинство), так почему же функция не может возвращать ссылку на нее!?
0
15.05.2012, 00:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2012, 00:19
Привет! Вот еще темы с ответами:

Возвращение ссылки или указателя на закрытый элемент класса. - C++
Всех уважаемых форуман. поздравляю с наступившим новым годом и прошу ответить на такой вопрос. Почему до сих пор современный C++ не...

Возвращение ссылки на указатель использование её как левостороннего значения - C++
Есть шаблон: //------------------------------------------------------- template<class T> struct ts { private: void* data; ...

Возврат указателя на локальный объект - C++
Доброго дня! Заинтересовал процесс возврата указателя на локальный объек, а именно: char* fun() { char *ptr1 = "Hello world!"; ...

Возвращение значения в функции, ссылки, вычислить корни квадратного уравнения - C++
Определить функцию вычисления корней квадратного уравнения. Функция должна возвращать значение 1, если корни найдены, значение 0, если...


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

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

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