Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Rvalue references for *this. как использовать? 
V
    Опции темы
boostcoder
Дата 13.4.2012, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



привет.

проглядывая C++11 Status, обратил внимание на то, что сабж не реализован.

помимо этого, я что-то никак представить не могу, для чего оно надо и как его использовать...

подскажите, кто в теме.

спасибо.

PM WWW   Вверх
bsa
Дата 13.4.2012, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



ну как же. У тебя есть класс, например String. У него есть метод, например: String String::upperCase() const - возвращает текущую строку, приведенную к верхнему регистру. Сейчас тебе необходимо делать копирование. В случае же rvalue reference for *this его делать не нужно будет (необходимо будет только перенести данные из одного объекта в другой)! В итоге:
- нет одного выделения памяти
- нет одного освобождения памяти
- возможно плюшки с кэшем, так как работа будет без копирования.
PM   Вверх
boostcoder
Дата 13.4.2012, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(bsa @  13.4.2012,  14:29 Найти цитируемый пост)
String String::upperCase() const

или: "String &&String::upperCase() const" ?

а вообще да, пример весьма показательный. спасибо.

PM WWW   Вверх
bsa
Дата 13.4.2012, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(boostcoder @  13.4.2012,  15:34 Найти цитируемый пост)
или: "String &&String::upperCase() const" ?
Честно говоря, я еще не особо с С++11 работал. Поэтому точно не знаю. Разве в моем случае возвращается не rvalue?

Кстати, я тут посмотрел, clang имеет большую поддержку C++11, правда, еще многое только в SVN.
PM   Вверх
boostcoder
Дата 13.4.2012, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(bsa @  13.4.2012,  14:42 Найти цитируемый пост)
clang имеет большую поддержку C++11

да, на два пункта впереди.

ничего, скоро я сборки clang тоже буду предоставлять ;)

PM WWW   Вверх
mes
Дата 13.4.2012, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(boostcoder @  13.4.2012,  13:34 Найти цитируемый пост)
String &&String::upperCase() const" ?

суть проблемы не в возвращающем значении, а в аргументе this.. 
сейчас по нему нельзя узнать rvalue он или нет.. 



--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 13.4.2012, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  13.4.2012,  14:56 Найти цитируемый пост)
сейчас по нему нельзя узнать rvalue он или нет

а как-то более развернуто можете объяснить, что Вы имеете ввиду?
PM WWW   Вверх
mes
Дата 13.4.2012, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



к примеру есть такие свободные функции с акцентом на принимаемое значение.. 
Код

s do_some (S const& s) 
{
    S tmp (s);
    ...
    return tmp;
}
s do_some (S && s) 
{
    ...
    return s;
}

как тоже самое сделать для класса, чтоб вместо
Код

S s = do_some (S());

 сработала такая конструкция :
Код

S s = S().do_some ();



Это сообщение отредактировал(а) mes - 13.4.2012, 15:12


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 13.4.2012, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



mes, правильно ли я понимаю, что будет какой-то синтаксис (которого сейчас нет) для перегрузки методов класса для rvalue и не-rvalue this ? Типа такого
Код

struct S {
    S do_some( &&this ) {
        // здесь я могу "красть" ресурсы у себя же
    }
    S do_some() {
        // это обычный метод. Я должен создать переменную типа S, заполнить её и вернуть
    }
};



Это сообщение отредактировал(а) borisbn - 13.4.2012, 16:26


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 13.4.2012, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



Цитата(mes @  13.4.2012,  15:12 Найти цитируемый пост)
как тоже самое сделать для класса, чтоб вместо

это вопрос?

PM WWW   Вверх
mes
Дата 13.4.2012, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(borisbn @  13.4.2012,  15:21 Найти цитируемый пост)
правильно ли я понимаю, что будет какой-то синтаксис

я не в курсе smile

Цитата(borisbn @  13.4.2012,  15:21 Найти цитируемый пост)
 здесь я могу "красть" ресурсы у себя же

это по сути верно smile только удобнее, когда крадение будет неявным для пользователя.. 
Цитата(borisbn @  13.4.2012,  15:21 Найти цитируемый пост)
 Я должен создать переменную типа S, заполнить её и вернуть

ага, а в первом случае можно изменять и возвращать себя 

Цитата(boostcoder @  13.4.2012,  15:58 Найти цитируемый пост)
это вопрос?

ага, риторический..  smile 

Это сообщение отредактировал(а) mes - 13.4.2012, 20:00


--------------------
PM MAIL WWW   Вверх
bsa
Дата 13.4.2012, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



синтаксис rvalue reference for *this будет такой:
Код
class MyClass {
   void myMethod() &&;
};


Это сообщение отредактировал(а) bsa - 13.4.2012, 23:33
PM   Вверх
boostcoder
Дата 13.4.2012, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



bsa, это к чему?
PM WWW   Вверх
bsa
Дата 13.4.2012, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



На всякий случай. Если кто не знает, а посмотреть лень.

Это сообщение отредактировал(а) bsa - 13.4.2012, 23:34
PM   Вверх
boostcoder
Дата 14.4.2012, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



я это и имел ввиду.
я не знаю что это.
это сигнатура метода использующего rvalue для *this?

PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0981 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.