🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #5093

Re: [C++] function overloading en typedef

#5093
From: Bert Peers
Date: Wed, 28 May 2003 22:14
52 lines
3684 bytes
Nicolas Barbier wrote:

> int main()
> {
>         bliep(Blaat::gimme());
>         /* Hier vergeet ik iets te returnen, merk dat GCC daar zelfs met
>            -Wall, -ansi en -pedantic niets op zegt, en dat er in de
>            gegenereerde code zelfs voor gezorgd wordt dat er 0 wordt
>            gereturnd? */

Dat is volgens de standaard.  Als je zonder return
statement uit een functie dondert die een int zou moeten
returnen, heb je undefined behavior, _behalve_ voor
main -- daar return je vanzelf 0 (zie 3.6.1.5).

>>Maar dan nog weet ik niet of dit helpt -- de copy constructor wordt
>>aangeroepen op het moment dat de return value van de functie in de
>>"recipient" terecht komt.Als die recipient enkel een const& nodig heeft,
>>moet er niks gekopieerd worden.  Ik zou zelfs bijna zeker zeggen,
>>"..._mag_ er niks gekopieerd worden".
> 
> Ben je daar zeker van? Je bedoelt dus dan in dit geval de copy-constructur 
> niet opgeroepen mag worden? Ik dacht altijd (puttende uit mijn absoluut 
> onbenullige C++ kennis :-) dat hij altijd wordt aangeroepen als je een 
> volledig object returnt uit een functie. Trouwens, waar zouden, bij een 
> gemiddelde compiler, anders de bytes van het object blijven staan?

Wel, de compiler is nu eenmaal verplicht om, als er een
const-reference naar een temporary gebruikt wordt als parameter,
te zorgen dat die temporary "lang genoeg" blijft hangen.

Denk maar aan het meer vertrouwde

void blabla (const std::string &s);
blabla ("yup");

Je kan die gimme zien als een "conversie" die van niks
een Blaat maakt...  Trouwens, of de copy c'tor nu aangeroepen
wordt of niet, het mysterie van de bytes wordt er niet minder
op : gezien het feit dat bliep een const Blaat& als argument
heeft, naar waar zou er dan eigenlijk gekopieerd worden ?
Antwoord : eveneens naar een onzichtbare Blaat die eventjes snel
wordt gealloceerd zodat bliep er een const& van kan krijgen.

De compiler heeft meer opties dan "heap of stack" :^)
In die zin klopt het dat er een kopie buiten
"de normale ruimte van de functie" (dwz de stack) wordt
gemaakt -- waar het om gaat is dat de copy constructor
daar niet voor (mag) gebruikt worden, enkel compiler magic.


Bert
Technical Details
Message-ID: <lxaBa.230897$me2.30732029@amsnews02.chello.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-01!sn-xit-09!sn-xit-08!supernews.com!small1.nntp.aus1.giganews.com!border1.nntp.aus1.giganews.com!nntp.giganews.com!amsnews01.chello.com!amsnews02.chello.com.POSTED!53ab2750!not-for-mail
References: <3ed4a249.0@news.ruca.ua.ac.be> <AT2Ba.24246$1u5.1895@afrodite.telenet-ops.be> <3ed50561$0$6523$afc38c87@sisyphus.news.be.easynet.net> <T%8Ba.229391$me2.30588678@amsnews02.chello.com> <3ed5259a$0$6525$afc38c87@sisyphus.news.be.easynet.net>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,3077f069a49c0aca
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2003-05-28 16:17:01 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-01!sn-xit-09!sn-xit-08!supernews.com!small1.nntp.aus1.giganews.com!border1.nntp.aus1.giganews.com!nntp.giganews.com!amsnews01.chello.com!amsnews02.chello.com.POSTED!53ab2750!not-for-mail
From: Bert Peers <spam@spam.spam>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.3) Gecko/20030312
X-Accept-Language: en-us, en, ja
MIME-Version: 1.0
Newsgroups: be.comp.programming
Subject: Re: [C++] function overloading en typedef
References: <3ed4a249.0@news.ruca.ua.ac.be> <AT2Ba.24246$1u5.1895@afrodite.telenet-ops.be> <3ed50561$0$6523$afc38c87@sisyphus.news.be.easynet.net> <T%8Ba.229391$me2.30588678@amsnews02.chello.com> <3ed5259a$0$6525$afc38c87@sisyphus.news.be.easynet.net>
In-Reply-To: <3ed5259a$0$6525$afc38c87@sisyphus.news.be.easynet.net>
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Lines: 53
Message-ID: <lxaBa.230897$me2.30732029@amsnews02.chello.com>
Date: Wed, 28 May 2003 22:14:41 GMT
NNTP-Posting-Host: 195.162.217.20
X-Complaints-To: abuse@chello.be
X-Trace: amsnews02.chello.com 1054160081 195.162.217.20 (Wed, 28 May 2003 23:14:41 WEST)
NNTP-Posting-Date: Wed, 28 May 2003 23:14:41 WEST
Organization: chello broadband