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

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

Войти
Регистрация
Восстановить пароль
 
no_wearines
53 / 49 / 2
Регистрация: 01.01.2012
Сообщений: 332
#1

время жизни временного объекта - C++

07.09.2013, 15:19. Просмотров 565. Ответов 11
Метки нет (Все метки)

можно ли передать временный объект в функцию по ссылке?

C++
1
2
3
4
5
6
7
void f1(int & );
 
.....
 
int main() {
 
f1(int());
компилятор ошибок не выдает. Вопрос в том действует ли фокус с ссылкой, или это просто компилятор оптимизирует код?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2013, 15:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос время жизни временного объекта (C++):

Время жизни объекта - C++
Доброго времени суток, объясните пожалуйста, как можно продлить время жизни объекта, который создан локально. В данном случае - есть...

Копирование из временного объекта - C++
1) Собственно, как работает такой конструктор? Хотелось бы какой-нибудь пример. 2) Сильно ли различаются по скорости new/notthrow...

Возвращение временного объекта из метода - C++
Доброго времени суток,господа! Сразу к делу: Имеется следующий код: struct Test { int a; //Lets just exist Test(){}...

Как избежать постоянных инициализаций временного объекта? - C++
Здравствуйте! Будет ли этот код class my::testBuffer{ //код А private: int data; public: testBuffer(const int& d ) :...

Почему для временного безымянного объекта не вызывается оператор ()? - C++
Почему AddValue(value)(*pos); не вызывает operator()(int &elem) из класса AddValue? class AddValue { public: AddValue(int...

Время жизни переменных - C++
Добрый вечер. у меня такая проблема. мне нужно перегрузить функцию для моего класса: numb numb::operator +(const numb &p)const { ...

11
Kuzia domovenok
1892 / 1747 / 119
Регистрация: 25.03.2012
Сообщений: 5,936
Записей в блоге: 1
07.09.2013, 15:31 #2
что за компилятор? у меня выдаёт!
0
no_wearines
53 / 49 / 2
Регистрация: 01.01.2012
Сообщений: 332
07.09.2013, 15:32  [ТС] #3
C++ Builder 6
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,198
Завершенные тесты: 1
07.09.2013, 15:40 #4
Builder'а у меня нет, но могу предположить, что если он по умолчанию считает, что функции возвращают int, то
C++
1
f1(int());
можно прочитать как объявление функции f1, возвращающей int, с безымянным параметром типа int.

Добавлено через 1 минуту
Напиши в этой f1 что-нибудь и посмотри, выполняется ли она, тогда будет понятно, объявление это или вызов.
0
no_wearines
53 / 49 / 2
Регистрация: 01.01.2012
Сообщений: 332
07.09.2013, 15:43  [ТС] #5
Так в чем фокус? Что в функцию пойдет? Адрес или копия объекта?
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,198
Завершенные тесты: 1
07.09.2013, 16:11 #6
Так ты уверен, что это именно вызов функции?
0
no_wearines
53 / 49 / 2
Регистрация: 01.01.2012
Сообщений: 332
07.09.2013, 16:15  [ТС] #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int f1(int &q)
{
q = 3;
return q;
}
 
int main() {
 
cout<<f1(int());
 
getch();
return 0;
}
такая запись работает - значит функция.
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,198
Завершенные тесты: 1
07.09.2013, 16:16 #8
Смотри тогда ассемблерный листинг (с отключенной оптимизацией лучше).
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
07.09.2013, 16:22 #9
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
void f1(int &)
{
}
 
int main()
{
    f1(int());
}
Код
-*- mode: compilation; default-directory: "~/samples/cpp/" -*-
Compilation started at Sat Sep  7 23:20:56

cmake --build /home/nameless/samples/cpp/bin/
[100%] Building CXX object CMakeFiles/sample.dir/main.cc.o
/home/nameless/samples/cpp/main.cc: In function ‘int main()’:
/home/nameless/samples/cpp/main.cc:9:13: error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’
     f1(int());
             ^
/home/nameless/samples/cpp/main.cc:3:6: error: in passing argument 1 of ‘void f1(int&)’
 void f1(int &)
      ^
make[2]: *** [CMakeFiles/sample.dir/main.cc.o] Ошибка 1
make[1]: *** [CMakeFiles/sample.dir/all] Ошибка 2
make: *** [all] Ошибка 2

Compilation exited abnormally with code 2 at Sat Sep  7 23:20:57
Вывод: ищи нормальный компилятор.
1
no_wearines
53 / 49 / 2
Регистрация: 01.01.2012
Сообщений: 332
07.09.2013, 16:28  [ТС] #10
Да фиг уже с ним. раз не по стандарту - значит не по стандарту.
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
07.09.2013, 16:33 #11
no_wearines, на самом деле, по (новому) стандарту ссылки на временные объекты (rvalue references) допускаются. К примеру, такой код уже скомпилируется:
C++
1
2
3
4
5
6
7
8
void f1(int &&)
{
}
 
int main()
{
    f1(int());
}
Однако, шестой билдер, насколько я знаю, новый стандарт не поддерживает, ну и предназначение rvalue references немного другое.
1
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
07.09.2013, 17:27 #12
По крайней мере:
C++
1
void f1(const int &)
должно и в билдере работать.
1
07.09.2013, 17:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2013, 17:27
Привет! Вот еще темы с ответами:

Время жизни объектов - C++
Вроде простая вещь, а не могу понять почему так. #include &lt;iostream&gt; using namespace std; int* f() { int a = 7; int...

C++11 время жизни переменных - C++
После долгого перерыва в программирование вновь спохватился и тут наткнулся на такую не ожиданность #include &lt;iostream&gt; using...

Время жизни локальных переменных в цикле - C++
Добрый вечер! допустим, в таком коде: int i=100; while(i&gt;0) { int t = i+1; ... --i; }

Определить время жизни Static переменной - C++
Привет народ. Вопрос: Если static переменная объявлена в теге(внутри функции), она будет жить пока не закроется тег или всю функцию и после...


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

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

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