Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   How is operator+ called with rvalue reference? (http://www.velocityreviews.com/forums/t753795-how-is-operator-called-with-rvalue-reference.html)

Nephi Immortal 09-09-2011 02:45 AM

How is operator+ called with rvalue reference?
 
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)

SG 09-09-2011 11:41 AM

Re: How is operator+ called with rvalue reference?
 
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


All times are GMT. The time now is 05:15 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.