c++ - What problems are solved by holding a Temporary using `const T &`? -


like, if write code looks following:

const int & const_value = 10; 

what advantage gaining on code instead this:

int value = 10; 

or

const int const_value = 10; 

even more complicated example, like

const enterprise::complicated_class_which_takes_time_to_construct & obj = factory.create_instance(); 

thanks copy elision, both of following code snippets shouldn't faster or less memory consuming.

enterprise::complicated_class_which_takes_time_to_construct obj = factory.create_instance(); 

or

const enterprise::complicated_class_which_takes_time_to_construct obj = factory.create_instance(); 

is there i'm missing explains use of construct, or hidden benefit i'm not accounting for?

edit:

the answer provided @nwp supplied example of factory method looks following:

using cc = enterprise::complicated_class_which_takes_time_to_construct; struct factory{     const cc &create_instance(){         static const cc instance;         return instance;     } } factory; 

while example of why you'd need exact const reference construct in general, doesn't answer why needed dealing temporaries, or why particular construct better seating temporary in proper stack-allocated object, compiler should still able copy-elide in normal situations.

imagine factory "clever" , like

using cc = enterprise::complicated_class_which_takes_time_to_construct; struct factory{     const cc &create_instance(){         static const cc instance;         return instance;     } } factory; 

and further assume cc not copyable const & version works while other 2 don't. common classes implement cache , keep local map of objects , reference object inside map.

edit:

it possible coding guideline take return values functions const &, because works universally values , references.

cc foo(); cc &foo(); const cc &foo(); 

if use const cc &var = foo(); work without unnecessary copy in cases. temporary, don't, code right thing, freeing change implementation , not having care how function use returns return-value. there still issue of having const in there, not superior notation in cases, viable design choice.


Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo