I ran across this article on copy ellision in C++ and I’ve seen comments about it in the boost library. This is appealing, as I prefer my functions to look like
verylargereturntype DoSomething(...)
rather than
void DoSomething(..., verylargereturntype& retval)
So, I have two questions about this
- Google has virtually no documentation on this at all, how real is this?
- How can I check that this optimization is actually occuring? I assume it involves looking at the assembly, but lets just say that isn’t my strong suit. If anyone can give a very basic example as to what successful ellision looks like, that would be very useful
I won’t be using copy ellision just to prettify things, but if I can be guaranteed that it works, it sounds pretty useful.
I think this is a very commonly applied optimization because:
If you’re just curious, put a debug
printf()in your copy constructor:Prints out “copied a foo” when I run an unoptimmized build, but nothing when I build optimized.