Michael DOUBEZ a écrit :
> Mickaël Wolff a écrit :
>> Bonjour la liste,
>>
>> Je n'arrive pas à saisir le concept des « rvalue references », promis
>> pour la prochaine normalisation du C++.
> 2. Utilisation de temporaires en tant que paramètre non const.
>
> Par exemple, ça veut dire que tu peux utiliser une valeur renvoyée par
> une fonction en tant que paramètre non-const (Pour peu que la class soit
> moveable).Une application pratique est une fonction get_log_stream() qui
> te renvoie une stream que tu vas utiliser pour contruire un log; le log
> est envoyé à la destruction de la stream.
>
> logstream get_log_stream();
>
> Aujourdhui, tu ne peux pas faire:
>
> get_log_stream()<<"LOG: Error "<<errno<<std::endl;
En fait si, tu peux le faire, a condition que get_log_stream renvoie
un proxy copiable, avec un comptage de reference et un operator<<
template qui prend en premier argument un const :
template< typename T >
inline OutputStreamWrapper const&
operator<<( OutputStreamWrapper const& dest, T const& src )
{
if ( std:

stream* target = dest.getStream() ) {
*target << src;
}
return dest;
}
Au passage: merci James.
Mais c'est vrai qu'avec le move, c'est beaucoup plus simple, puisque
tout le bazar necessaire jusqu'a present sera offert par le langage.