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

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

Восстановить пароль Регистрация
 
no_wearines
 Аватар для no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 322
07.09.2013, 15:19     время жизни временного объекта #1
можно ли передать временный объект в функцию по ссылке?

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

C++ Время жизни переменных
Как избежать постоянных инициализаций временного объекта? C++
C++ Копирование из временного объекта
C++ Область видимости и время жизни переменных внутри класса
Изменение фактического состояния объекта не мгновенно по вызове метода, а через некоторое время C++
C++11 время жизни переменных C++
C++ Время жизни объекта
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
07.09.2013, 15:31     время жизни временного объекта #2
что за компилятор? у меня выдаёт!
no_wearines
 Аватар для no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 322
07.09.2013, 15:32  [ТС]     время жизни временного объекта #3
C++ Builder 6
Somebody
2775 / 1588 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
07.09.2013, 15:40     время жизни временного объекта #4
Builder'а у меня нет, но могу предположить, что если он по умолчанию считает, что функции возвращают int, то
C++
1
f1(int());
можно прочитать как объявление функции f1, возвращающей int, с безымянным параметром типа int.

Добавлено через 1 минуту
Напиши в этой f1 что-нибудь и посмотри, выполняется ли она, тогда будет понятно, объявление это или вызов.
no_wearines
 Аватар для no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 322
07.09.2013, 15:43  [ТС]     время жизни временного объекта #5
Так в чем фокус? Что в функцию пойдет? Адрес или копия объекта?
Somebody
2775 / 1588 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
07.09.2013, 16:11     время жизни временного объекта #6
Так ты уверен, что это именно вызов функции?
no_wearines
 Аватар для no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 322
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;
}
такая запись работает - значит функция.
Somebody
2775 / 1588 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
07.09.2013, 16:16     время жизни временного объекта #8
Смотри тогда ассемблерный листинг (с отключенной оптимизацией лучше).
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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
Вывод: ищи нормальный компилятор.
no_wearines
 Аватар для no_wearines
52 / 48 / 2
Регистрация: 01.01.2012
Сообщений: 322
07.09.2013, 16:28  [ТС]     время жизни временного объекта #10
Да фиг уже с ним. раз не по стандарту - значит не по стандарту.
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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 немного другое.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2013, 17:27     время жизни временного объекта
Еще ссылки по теме:

C++ Выведите в окно приложения прочитанную фамилию и оставшееся "время жизни" до 3000г
Определить время жизни Static переменной C++
C++ Время жизни объектов
Возвращение временного объекта из метода C++
C++ Почему для временного безымянного объекта не вызывается оператор ()?

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

Или воспользуйтесь поиском по форуму:
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
07.09.2013, 17:27     время жизни временного объекта #12
По крайней мере:
C++
1
void f1(const int &)
должно и в билдере работать.
Yandex
Объявления
07.09.2013, 17:27     время жизни временного объекта
Ответ Создать тему
Опции темы

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