{"id":24445,"date":"2022-12-03T01:43:00","date_gmt":"2022-12-02T20:13:00","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/"},"modified":"2022-12-03T01:43:00","modified_gmt":"2022-12-02T20:13:00","slug":"solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/","title":{"rendered":"[Solved] What&#8217;s the difference between class reference and class object when the function return class object in C++?"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-27824206\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"27824206\" data-parentid=\"27823911\" data-score=\"1\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<pre><code>Abc &amp;obj11 = fun1();\n<\/code><\/pre>\n<p><strong>This line makes the program ill-formed;<\/strong> the C++ specification forbids temporaries to be bound to a reference that is not <code>const<\/code>.  A compliant C++ compiler would emit an error to this effect.  Presumably you are using the Microsoft Visual C++ compiler, which is well-known for allowing the binding of a temporary to a non-<code>const<\/code> reference in contradiction to the C++ specification.<\/p>\n<pre><code>const Abc &amp;obj11 = fun1();\n<\/code><\/pre>\n<p>This line would be well-formed, and it causes the temporary to be bound to the reference.<\/p>\n<p>In any case, when binding a temporary to a reference the temporary will have its lifetime extended to match the lifetime of the reference, so when the reference goes out of scope the temporary will also be destroyed.  In other words, in terms of lifetime semantics it&#8217;s equivalent to the line <code>Abc obj1 = fun1();<\/code><sup>1<\/sup>. If you are using a compiler that elides copies then all copies will be elided in both cases. If not eliding copies then the reference case will involve one less copy:<\/p>\n<ul>\n<li>Value case, the returned object will be copied into a temporary and then destroyed, and the temporary will be copied into <code>obj1<\/code> and then destroyed.<\/li>\n<li>Reference case, the returned object will be copied into a temporary and then destroyed, and the temporary will be bound to the reference.<\/li>\n<\/ul>\n<p>Note that a decent optimizing compiler will optimize away all copies as well as the reference detail completely, leaving you with identical assembly output for both of the cases in your question.<\/p>\n<p>(If you&#8217;re interested, <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/coliru.stacked-crooked.com\/a\/5c638216301b12c0\">here is a test case<\/a> with code slightly tweaked from that in your question. Note that no copies are made in either case unless copy elision is disabled.)<\/p>\n<hr>\n<p><sup>1<\/sup> Note that this is different from the code <code>Abc obj1; obj1 = fun1();<\/code> in your question. I intentionally changed it, because the code you have written isn&#8217;t directly comparable and so it doesn&#8217;t make much sense to compare them.  If you rewrite it as <code>Abc obj1 = fun1();<\/code> then the two lines can be compared, because <code>Abc obj1; obj1 = fun1();<\/code> involves default-construction and then copy-assignment.<\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">9<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved What&#8217;s the difference between class reference and class object when the function return class object in C++? <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] Abc &amp;obj11 = fun1(); This line makes the program ill-formed; the C++ specification forbids temporaries to be bound to a reference that is not const. A compliant C++ compiler would emit an error to this effect. Presumably you are using the Microsoft Visual C++ compiler, which is well-known for allowing the binding of a &#8230; <a title=\"[Solved] What&#8217;s the difference between class reference and class object when the function return class object in C++?\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/\" aria-label=\"More on [Solved] What&#8217;s the difference between class reference and class object when the function return class object in C++?\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[324],"class_list":["post-24445","post","type-post","status-publish","format-standard","hentry","category-solved","tag-c"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] What&#039;s the difference between class reference and class object when the function return class object in C++? - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] What&#039;s the difference between class reference and class object when the function return class object in C++? - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] Abc &amp;obj11 = fun1(); This line makes the program ill-formed; the C++ specification forbids temporaries to be bound to a reference that is not const. A compliant C++ compiler would emit an error to this effect. Presumably you are using the Microsoft Visual C++ compiler, which is well-known for allowing the binding of a ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-02T20:13:00+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] What&#8217;s the difference between class reference and class object when the function return class object in C++?\",\"datePublished\":\"2022-12-02T20:13:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/\"},\"wordCount\":364,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"c++\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/\",\"name\":\"[Solved] What's the difference between class reference and class object when the function return class object in C++? - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-12-02T20:13:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] What&#8217;s the difference between class reference and class object when the function return class object in C++?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] What's the difference between class reference and class object when the function return class object in C++? - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] What's the difference between class reference and class object when the function return class object in C++? - JassWeb","og_description":"[ad_1] Abc &amp;obj11 = fun1(); This line makes the program ill-formed; the C++ specification forbids temporaries to be bound to a reference that is not const. A compliant C++ compiler would emit an error to this effect. Presumably you are using the Microsoft Visual C++ compiler, which is well-known for allowing the binding of a ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/","og_site_name":"JassWeb","article_published_time":"2022-12-02T20:13:00+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] What&#8217;s the difference between class reference and class object when the function return class object in C++?","datePublished":"2022-12-02T20:13:00+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/"},"wordCount":364,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["c++"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/","url":"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/","name":"[Solved] What's the difference between class reference and class object when the function return class object in C++? - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-12-02T20:13:00+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-whats-the-difference-between-class-reference-and-class-object-when-the-function-return-class-object-in-c\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] What&#8217;s the difference between class reference and class object when the function return class object in C++?"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1776403586","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/24445","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=24445"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/24445\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=24445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=24445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=24445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}