Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > How is operator+ called with rvalue reference?

Reply
Thread Tools

How is operator+ called with rvalue reference?

 
 
Nephi Immortal
Guest
Posts: n/a
 
      09-09-2011
I read rvalue reference article. Here is the website:
http://blogs.msdn.com/b/vcblog/archi...10-part-2.aspx.
I wrote my code below. I can only see that rvalue reference is used
in the first parameter of the operator+ function.

int main()
{
string s1( "01" );
string s2( "23" );

string s3 = s1 + s2 + "AB";

return 0;
}

After s3 executed, first function is called:

basic_string<_Elem, _Traits, _Alloc> operator+(
const basic_string<_Elem, _Traits, _Alloc>& _Left,
const basic_string<_Elem, _Traits, _Alloc>& _Right)

Then, it moves in the right direction and second function is called:

basic_string<_Elem, _Traits, _Alloc> operator+(
basic_string<_Elem, _Traits, _Alloc>&& _Left,
const _Elem *_Right)

Until move assignment operator is reached.

Can you please be kind to demonstrate your code? How can two
functions be called like below?

basic_string<_Elem, _Traits, _Alloc> operator+(
const _Elem *_Left,
basic_string<_Elem, _Traits, _Alloc>&& _Right)

and

basic_string<_Elem, _Traits, _Alloc> operator+(
basic_string<_Elem, _Traits, _Alloc>&& _Left,
basic_string<_Elem, _Traits, _Alloc>&& _Right)
 
Reply With Quote
 
 
 
 
SG
Guest
Posts: n/a
 
      09-09-2011
On 9 Sep., 04:45, Nephi Immortal wrote:
> I read rvalue reference article.* Here is the website:
> http://blogs.msdn.com/b/vcblog/archi...e-references-c....


Unfortunately, this article is not up-to-date with respect to the
current rvalue reference rules. But the same author also made a nice
video tutorial on this topic not too long ago:

http://channel9.msdn.com/Shows/Going...ary-STL-9-of-n

I can also recomment Scott Meyers' recent talk on this topic which is
publicly available on the net.

> I wrote my code below. *I can only see that rvalue reference is used
> in the first parameter of the operator+ function.
>
> int main()
> {
> * * string s1( "01" );
> * * string s2( "23" );
> * * string s3 = s1 + s2 + "AB";
> * * return 0;
> }
>
> After s3 executed, first function is called:
>
> string operator+(
> * * * * const string& _Left,
> * * * * const string& _Right)
>
> Then, it moves in the right direction and second function is called:
>
> string operator+(
> * * * * string&& _Left,
> * * * * const char *_Right)
>
> Until move assignment operator is reached.


That seems about right.

> Can you please be kind to demonstrate your code? *
> How can two functions be called like below?
>
> string operator+(
> * * * * const char *_Left,
> * * * * string&& _Right)
>
> and
>
> string operator+(
> * * * * string&& _Left,
> * * * * string&& _Right)


OK, here it is:

----------8<----------

string world();

int main() {
"Hello" + world(); // invokes operator+(const char*,string&&)
world() + world(); // invokes operator+(string&&,string&&)
return 0;
}

----------8<----------

Cheers!
SG
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Giving an rvalue ref to a function taking an rvalue ref Juha Nieminen C++ 13 08-29-2012 09:25 PM
operators requiring lvalue/rvalue operands and resulting in rvalue/lvalue Kavya C Programming 9 10-28-2006 01:45 AM
rvalue / lvalue operator[] Gonzalo Aguirre C++ 4 01-02-2004 06:02 PM
++x returns lvalue but x++ return rvalue Chris Mantoulidis C++ 4 12-29-2003 07:00 AM



Advertisments