From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,55f6e230b02eff2f X-Google-Attributes: gid103376,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!postnews.google.com!g4g2000hsf.googlegroups.com!not-for-mail From: Maciej Sobczak Newsgroups: comp.lang.ada Subject: Re: Containers - nontrivial element access Date: Wed, 03 Oct 2007 12:48:39 -0700 Organization: http://groups.google.com Message-ID: <1191440919.716667.293720@g4g2000hsf.googlegroups.com> References: <1191275759.184463.238350@n39g2000hsh.googlegroups.com> <1191358254.405682.320670@22g2000hsm.googlegroups.com> <4hBMi.132431$Fc.72735@attbi_s21> <10xbnt0vkcyeo.5t72qwg3umwd.dlg@40tude.net> NNTP-Posting-Host: 85.3.110.87 Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" X-Trace: posting.google.com 1191440919 3500 127.0.0.1 (3 Oct 2007 19:48:39 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Wed, 3 Oct 2007 19:48:39 +0000 (UTC) In-Reply-To: User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7,gzip(gfe),gzip(gfe) Complaints-To: groups-abuse@google.com Injection-Info: g4g2000hsf.googlegroups.com; posting-host=85.3.110.87; posting-account=ps2QrAMAAAA6_jCuRt2JEIpn5Otqf_w0 Xref: g2news2.google.com comp.lang.ada:2274 Date: 2007-10-03T12:48:39-07:00 List-Id: On 3 Pa , 21:15, Simon Wright wrote: > I'm no expert, but I would have expected C++ to distinguish given > > struct Foo { > ... > }; > > the three different functions > > Foo return_by_value(); > Foo* return_by_access(); > Foo& return_by_reference(); Yes, it does distinguish them. Note that first and third version are not distinguishable in syntax at the call-site (except that only the third one allows to bind to non- const references). > I wonder what the difference between Foo* and Foo& is? I don't suppose > there's any difference at the object code level? (except Foo* can be > 0). Foo* can be NULL, and there is no provision for anything at the object code level. Actually, this "level" is not relevant at all as far as the language is concerned. But in practical terms (standard aside), you can expect that Foo* and Foo& will not differ at the object level, although things can get more interesting when the calls are inlined. -- Maciej Sobczak * www.msobczak.com * www.inspirel.com