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

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

Войти
Регистрация
Восстановить пароль
 
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
#1

rvalue - C++

22.10.2011, 23:17. Просмотров 720. Ответов 6
Метки нет (Все метки)

добрый вечер. интересно ваше мнение. значит ли появление rvalue reference в новом стандарте то, что теперь локальным объектам зеленый свет. Даешь пользование локальных объектов где хоцца. Не нарушает ли это "хороший тон" так усердно прививаемый тем кто пользует с++? (Никогда не используй ссылку на локальную переменную - быть бэдэ)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.10.2011, 23:29     rvalue #2
Цитата Сообщение от AzaKendler Посмотреть сообщение
что теперь локальным объектам зеленый свет.
объекты локальны относительно чего?
C++
1
2
3
4
5
struct mystruct { };
int main()
{
    mystruct m; //локальный объект
}
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
22.10.2011, 23:33     rvalue #3
временным, а не локальным
Jupiter
Каратель
Эксперт С++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
22.10.2011, 23:34     rvalue #4
alex_x_x, ок, согласен, тогда что подразумевается под локальным объектом?
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
22.10.2011, 23:41     rvalue #5
Jupiter, ну если не влезать в точные формулировки стандарта, то локальные переменные - переменные, объявленные в текущей области видимости, короче внутри текущего
{

}
блока

x = y + z
значение y+z называется rvalue, так как существует только на момент вычисления выражения, по сути это может быть и x = std::string("123") и z++
как я понимаю в новом стандарте просто ввели синтаксические правила для работы с rvalue без копирования, хотя в подробности пока не вникал
может ктонить расскажет
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
22.10.2011, 23:53     rvalue #6
Цитата Сообщение от AzaKendler Посмотреть сообщение
Никогда не используй ссылку на локальную переменную - быть бэдэ
Это не изменилось, потому как локальная переменная это lvalue, её можно модифицировать, ей можно присваивать, она разрушается при выходе из блока в котором была объявлена, и у нас остается ссылка на несуществующий обьект
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2011, 01:20     rvalue
Еще ссылки по теме:

Rvalue ссылки C++
C++ Rvalue vector
Что такое rvalue и lvalue C++
C++ Rvalue и lvalue ссылки
C++ RVALUE ссылки и операции с ними

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

Или воспользуйтесь поиском по форуму:
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
23.10.2011, 01:20  [ТС]     rvalue #7
Net_Wanderer,
давай рассмотрим

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// named-reference.cpp
// Compile with: /EHsc
#include <iostream>
using namespace std;
 
// A class that contains a memory resource.
class MemoryBlock
{
   // TODO: Add resources for the class here.
};
 
void g(const MemoryBlock&) 
{
   cout << "In g(const MemoryBlock&)." << endl;
}
 
void g(MemoryBlock&&) 
{
   cout << "In g(MemoryBlock&&)." << endl;
}
 
MemoryBlock&& f(MemoryBlock&& block)
{
   g(block);
   return block; // тут у меня ругается и чтоб заработало я делал каст. блок это лвалю
}
 
int main()
{
   g(f(MemoryBlock()));
}
выход
C++
1
2
In g(const MemoryBlock&).
In g(MemoryBlock&&).
отсюда

вот хочу прояснить. есть переменная лвалю внутри тела функции, она будет уничтожена на выходе. т.е. есть какой то участок памяти отведенный ей. Что происходит например если я сделаю ей каст к рвалю? какой то друой участок памяти выделиться? и второй момент. мож у кого есть компиллятор с более полным набором фич. соберите у себя, даже интересно, в примере получается какое то автоприведение лвалю к рвалю?
Yandex
Объявления
23.10.2011, 01:20     rvalue
Ответ Создать тему
Опции темы

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