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

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

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

rvalue - C++

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

добрый вечер. интересно ваше мнение. значит ли появление rvalue reference в новом стандарте то, что теперь локальным объектам зеленый свет. Даешь пользование локальных объектов где хоцца. Не нарушает ли это "хороший тон" так усердно прививаемый тем кто пользует с++? (Никогда не используй ссылку на локальную переменную - быть бэдэ)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2011, 23:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос rvalue (C++):

Непостижимый rvalue - C++
Код// тестирование с чтением из потоков void stream_io_test( std::istream& in, std::ostream& out ); // тестируем, вводя числа из...

Rvalue vector - C++
Как это? vector<int&&> v = {0,0,0};// Это не скомпилируется (Вектор, якобы, хранит rvalue) vector<int> &&rval_vec = v; //Это не...

Rvalue ссылки - C++
Литературу читаю, но доезжаю медленно(если знаете где доступно описано- напишите),тяжело болею умственной анорексией. 1.Так вот о...

Rvalue reference - C++
#include <iostream> std::string get_string() { return std::string("12345"); } int main() { std::string const& str =...

Почему *(a+j) не rvalue? - C++
Запись массива вида a - это lvalue и эквивалентна *(a+j), но почему *(a+j) не rvalue, потому что сумма a+j должна была бы быть rvalue, но...

Rvalue и lvalue ссылки - C++
Здравствуйте, что расскажите, пожалуйста что такое lvalue и rvalue ссылки и с чем их едят, где можно использовать, и чем отличается...

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

}
блока

x = y + z
значение y+z называется rvalue, так как существует только на момент вычисления выражения, по сути это может быть и x = std::string("123") и z++
как я понимаю в новом стандарте просто ввели синтаксические правила для работы с rvalue без копирования, хотя в подробности пока не вникал
может ктонить расскажет
1
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
22.10.2011, 23:53 #6
Цитата Сообщение от AzaKendler Посмотреть сообщение
Никогда не используй ссылку на локальную переменную - быть бэдэ
Это не изменилось, потому как локальная переменная это lvalue, её можно модифицировать, ей можно присваивать, она разрушается при выходе из блока в котором была объявлена, и у нас остается ссылка на несуществующий обьект
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
23.10.2011, 01:20  [ТС] #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&&).
отсюда

вот хочу прояснить. есть переменная лвалю внутри тела функции, она будет уничтожена на выходе. т.е. есть какой то участок памяти отведенный ей. Что происходит например если я сделаю ей каст к рвалю? какой то друой участок памяти выделиться? и второй момент. мож у кого есть компиллятор с более полным набором фич. соберите у себя, даже интересно, в примере получается какое то автоприведение лвалю к рвалю?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2011, 01:20
Привет! Вот еще темы с ответами:

Function return rvalue - C++
Добрый день, #include &lt;iostream&gt; using namespace std; int&amp; Foo() { static int a = 14; return a; } int&amp;...

Rvalue reference and lambda - C++
void foo(A&amp;&amp; a) { auto l = () {}; //a? } Как передать в лямбду rvalue ref как просто ссылку? Чтобы потом использовать...

Rvalue передача в функцию - C++
Снова я с тупыми вопросами по поводу rvalue. Я не могу понять, почему такой код не работает: #include &lt;iostream&gt; void foo( int&amp;&amp;...

[C++11] move\rvalue ref semantic - C++
Перегрузил оператор присвоения используя move\rvalue ref semantic. /** * Copy operator * @param rhs Right hand side...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.10.2011, 01:20
Ответ Создать тему
Опции темы

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