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

Ссылки на временные объекты - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Передача члена структуры в функцию http://www.cyberforum.ru/cpp-beginners/thread1498386.html
Здравствуйте. Столкнулся с проблемой и не могу найти ее решение. есть структура: #ifndef STRUCTSCAN_H #define STRUCTSCAN_H struct sScaner{ char cModel; int iPrice;
C++ Компиляция GLUT Установил библиотеку glut, по началу вроде все нормально, но при компиляции потребовало opengl.dll, скачал я ему opengl.dll, потом "HfxClasses45.dll" , ладно скачал и его, а потом посыпались библиотечки ipl.dll и так далее. Подскажите , что делать в данной ситуации? http://www.cyberforum.ru/cpp-beginners/thread1498381.html
C++ Словарь с терминами по с (тип, объект, значение, переменная, и т.д. )
Нужен словарь с терминами по с++, такие как тип, объект, значение, переменная, и т.д. Путаюсь при чтении книги. Желательно с примерами, ибо такое как определение: "Значение - набор битов в памяти, интерпретируемый в соответствии с типом" вызывает взрыв мозгов.
C++ Удаление элемента из бинарного дерева
Ругается компилятор в Visual Studio при выполнении кода удаления элемента, а именно в том месте, где нужно удалить элемент с двумя дочерними элементами( в четвертом условии). Ошибка такая: "Unhandled exception at 0x0015483B in BinaryTree.exe: 0xC00000FD: Stack overflow (parameters: 0x00000001, 0x001C2FFC)." Что исправить? Код: Tree* DeleteNode(Tree* node, int ch) { /*Если удаляемый элемент...
C++ ошибка Run-Time Check Failure #2 http://www.cyberforum.ru/cpp-beginners/thread1498347.html
под конец програмки освобождал память и ошибка пропадала но происходило аварийное завершение ( подскажите где проблема . class publication { protected: string name; float price; public: publication() :name("N/A"), price(0.0)
C++ Посоветуйте книгу по Си++ Добрый вечер. Порядка года назад я очень хотел изучить языки Си и Си++, но не знал о них вобще ничего. Поставив себе эту цель, я начал грызть литературу по данным языкам. Сперва прочел книгу Лафоре - ООП и Си++, буквально вгрызаясь в каждую строчку книги, чтобы понять смысл всего, о чем там говорится, а так же выполнял все упражнения из нее, книга оказалась оооочень удачным введением для... подробнее

Показать сообщение отдельно
Alexey104
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 89

Ссылки на временные объекты - C++

13.07.2015, 21:37. Просмотров 373. Ответов 2
Метки (Все метки)

Здравствуйте!
В процессе экспериментов с С++ появились некоторые непонятки. Рассмотрим код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
using namespace std;
 
int& Func() {int a = 104; return a;}
 
int main()
{
  int c = Func();
  cout << c << "\n";
  return 0;
}
Ясен пень, данный код компилятор не хавает, поскольку в строке 5 производится попытка возврата из функции ссылки на локальную(временную) переменную этой функции. Я себе это представляю так:
Если бы компилятор позволил откомпилировать данный код, в строке 9 произошёл бы вызов функции, внутри которой была бы создана локальная переменная 'a'. Далее ссылка на эту переменную была бы возвращена из функции, а сама переменная после этого сразу была бы уничтожена. Затем в этой же строке произошла бы попытка инициализировать переменную 'c' ссылкой на уже не существующую переменную 'a'. Чтобы это предотвратить, компилятор уведомляет об ошибке.

Но прикол в том, что если строку 5 изменить следующим образом:
C++
1
int& Func() {int a = 104; int &b = a; return b;}
,
то код мало того, что компилируется, так ещё и корректно выполняется(строка 10 выводит на экран значение '104'). Никак не могу врубиться почему. Ведь, как и в первом случае, функция возвращает ссылку на временный объект. Может, компилятор не может "заглянуть" внутрь ссылки 'b' и увидеть, что она указывает на локальную переменную функции, поэтому и позволяет вернуть эту ссылку из функции? Но как же тогда переменная 'c' в строке 9 инициализируется этой ссылкой, если после её возврата(ссылки) из функции переменная 'a', на которую она указывает уничтожается?

Никто не прояснит ситуацию?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru