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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SaShka K
3 / 3 / 0
Регистрация: 16.01.2014
Сообщений: 55
#1

Значение якобы возвращённое функцией при опущенном return - C++

27.03.2014, 16:20. Просмотров 225. Ответов 4
Метки нет (Все метки)

Что считается значением, возвращённым функцией, в которой опущен оператор `return`?
Зачем компилятор позволяет не указывать `return` в не-void функциях?

Допустим, есть такой метод класса:
C++
1
2
3
4
5
6
7
8
9
10
11
...
int Arr::getElement(unsigned i){
   if (i >= _noe) {  //_noe - кол-во элементов массива
      printf("\t ERROR: Trying to access NONexistent element (current noe=%u). \n", _noe);
      //тут мог бы быть `return`, но вернуть мне нечего (были бы элементы массива ..
      //.. беззнаковыми, вернул бы "-1"). Т.к. не знаю, что вернуть, вообще не указал `return`.
   }
   else
      return _data[i];
}
...
Если в массиве `arr1` например всего 10 элементов, то вот эта строка в `main()` выводит значение "65". Откуда берётся это значение?
C++
1
std::cout << arr1.getElement(100);
Напомню, второй вопрос, почему такое оформление кода (без `return` в не-void функциях) допускает компилятор?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 16:20     Значение якобы возвращённое функцией при опущенном return
Посмотрите здесь:

Значение оператора return - C++
Прочитал про оператор return, но не очень понятно про его. Как он используется ниже (объясните), может после этого примера что-либо...

Значение пустого оператора return - C++
Скажите для чего он нужен вообще? допустим: void Func(){ if(){ //что-то делаем return; } }

Значение, возвращаемое return, не соответствует ожиданиям - C++
Добрый вечер! Подскажите, пожалуйста, что я делаю не так? Почему return возвращает 2, а не c? AleksandraM, код перепечатываем в...

Срабатывание деструктора при return класса - C++
Есть класс: class Test { public: char* Data; }; У этого класса есть деструктор который делает delete Data; Есть...

Значение, возвращаемое функцией (C++) - C++
В общем, задача такая. Написать программу, печатающую все вводимые символы в нижнем регистре. Программа должна использовать цикл while....

Переменные при использовании шаблонов. Оператор return - C++
Доброго времени суток. В домашнем задании на первом семестре обучения поставлена задача: написать перегруженные шаблоны функций для...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.03.2014, 16:54     Значение якобы возвращённое функцией при опущенном return #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от SaShka K Посмотреть сообщение
почему такое оформление кода (без `return` в не-void функциях) допускает компилятор?
Потому что это допускается стандартом. А стандартом это допускается в частности по причине того, что анализ на наличие возвращаемого значения может быть очень сложен для компилятора, например потому что возвращаемое значение можно установить используя ассемблерный код.
http://stackoverflow.com/questions/1...lue-without-pr
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
27.03.2014, 16:55     Значение якобы возвращённое функцией при опущенном return #3
Опытным путем выяснилось, что возвращает оно последнее возвращенное значение, которое оказалось возвращенным числом int, которое возвращает функция printf. А значит оно количество символом в строке.
Цитата Сообщение от SaShka K Посмотреть сообщение
\t ERROR: Trying to access NONexistent element (current noe=%u). \n
В данном случае 65.
SaShka K
3 / 3 / 0
Регистрация: 16.01.2014
Сообщений: 55
27.03.2014, 20:42  [ТС]     Значение якобы возвращённое функцией при опущенном return #4
В общем, это UB. Так в стандарте:
From n2960 draft:
§ 6.6.3/2
Flowing off the end of a function is equivalent to a return with no value; this results in undefined behavior in a value-returning function.
Спасибо за Ваши ответы. Возможно сможете подсказать мне, как, не прерывая выполнение программы, красиво обработать (в т.ч. без этой проблемы с отсутствием `return`) описанную в постановке вопроса попытку обращения к несуществующему элементу массива. На ум приходят только исключения, но это, видимо, не вполне подходящий инструмент для данной ситуации (громоздкий код получиться, которого, кажется, проблема не стоит). Заранее благодарен.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2014, 23:15     Значение якобы возвращённое функцией при опущенном return
Еще ссылки по теме:

Как присвоить значение возвращаемое функцией? - C++
#include &lt;iostream.h&gt; char* abc(int num){ static char masiv; masiv = num+'0'; return masiv; } main(){ char...

Variadic templates, якобы provided 0 argumnets - C++
Есть кто онлайн? Проблема в вариадик темплейтсах с компилятором. Не пропускает следующий код: template&lt;typename... Args&gt; void...

Куда отправляет return ,если при команде ничего прописано? - C++
куда отправляет return ,если при команде ничего прописано?

Вывести "return 0" если введенное значение равно -1 - C++
Вывести return 0 если в вводе есть -1 ,но есть одно но. я ввожу 3 элемента так while(cin&gt;&gt;time&gt;mission&gt;&gt;status) и вот такой тест 3 E...

Программа выдает одну ошибку, якобы в 48 строчке - C++
Завтра мне кирдык если не сделаю! Программа выдает одну ошибку, якобы в 48 строчке #include &lt;iostream.h&gt; #include &lt;math.h&gt; double...

Указатель на функцию, укзатель на воид и возвращаемое функцией значение - C++
Есть функции, идентичные по функционалу, но возвращающие значения разных типов(сами значения не важны). double a() { cout &lt;&lt; 123...


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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
27.03.2014, 23:15     Значение якобы возвращённое функцией при опущенном return #5
SaShka K, исключения - вполне стандартный подход. См. std::vector<T>::at()
Yandex
Объявления
27.03.2014, 23:15     Значение якобы возвращённое функцией при опущенном return
Ответ Создать тему
Опции темы

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