🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #5092

Re: [C++] function overloading en typedef

#5092
From: Nicolas Barbier
Date: Wed, 28 May 2003 21:09
93 lines
3930 bytes
Bert Peers wrote:

> Nicolas Barbier wrote:
>  >
>>         static Blaat gimme() {
>>                 return Blaat(5);
>> 
>> extern void bliep(const Blaat &b);
>> int main()
>> {
>>         bliep(Blaat(1));
>> 
>> Hoewel ik had verwacht dat het eerste deel van de functie beter
>> "samengeplakt" zou geworden zijn (de proloog wordt misschien nooit
>> geoptimaliseerd ofzo?), zie je duidelijk dat het object nooit gekopieerd
>> wordt.
> 
> Euh, ik kan niet goed volgen vrees ik.  Was het niet je bedoeling
> om iets te schrijven als bliep(Blaat::gimme()) ?

/me slaps himself *dough* "stupid!"

Inderdaad, ik lijk even verward te zijn geweest ;-)

Hier volgt de correcte versie, die echter eveneens aantoont dat GCC dit kan 
wegoptimalizeren:

/* test.cpp */
class Blaat {
public:
        Blaat(int i) {
                this->i = i;
        }
        static Blaat gimme() {
                return Blaat(5);
        }
private:
        int i;
};

extern void bliep(const Blaat &b);

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? */
}

/* gedeelte van test.s */
.globl main
        .type   main,@function
main:
.LFB1:
        pushl   %ebp
.LCFI0:
        movl    %esp, %ebp
.LCFI1:
        subl    $8, %esp
.LCFI2:
        andl    $-16, %esp
        subl    $12, %esp
        leal    -4(%ebp), %edx
        pushl   %edx
        movl    $5, -4(%ebp)
.LCFI3:
        call    _Z5bliepRK5Blaat
        xorl    %eax, %eax
        leave
        ret

> 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? De stack 
gaat meteen weer worden overschreven terwijl er via de referentie nog naar 
het object kan gerefereerd worden.

Die "bliep" functie had ik er eigenlijk alleen maar bijgezet om te 
voorkomen dat alles volledig zou worden weg-geoptimalizeerd :-) (niet 
getest of dat ook werkelijk zo zou zijn anders).

-- 
Nicolas Barbier
Technical Details
Message-ID: <3ed5259a$0$6525$afc38c87@sisyphus.news.be.easynet.net>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-08!sn-xit-09!supernews.com!newsfeed.online.be!feed1.news.be.easynet.net!sisyphus.news.be.easynet.net!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>

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 14:09:59 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-08!sn-xit-09!supernews.com!newsfeed.online.be!feed1.news.be.easynet.net!sisyphus.news.be.easynet.net!not-for-mail
Message-ID: <3ed5259a$0$6525$afc38c87@sisyphus.news.be.easynet.net>
From: Nicolas Barbier <anti@spam.invalid>
Subject: Re: [C++] function overloading en typedef
Newsgroups: be.comp.programming
Date: Wed, 28 May 2003 23:09:02 +0200
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>
User-Agent: KNode/0.6.1
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7Bit
Lines: 93
Organization: [ posted via Easynet Belgium ]
NNTP-Posting-Date: 28 May 2003 21:09:47 GMT
NNTP-Posting-Host: 213.193.182.106
X-Trace: 1054156187  6525 [::ffff:213.193.182.106]:33579
X-Complaints-To: abuse@be.easynet.net