๐Ÿš€ go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #5089

Re: [C++] function overloading en typedef

#5089
From: Nicolas Barbier
Date: Wed, 28 May 2003 18:51
75 lines
3104 bytes
Roel Schroeven wrote:

> Dominique Devriese wrote:
> 
>> Roel Schroeven writes:
>> 
>>   Roel> GekleurdeInt foo = GekleurdeInt::fromInt(123);
>> 
>>   Roel> Dat wil dan wel zeggen dat je bij elke initialisatie eerst een
>>   Roel> object gaat aanmaken, en het dan kopi๏ฟฝren. Voor kleine klassen
>>   Roel> niet erg, voor grotere zaken is dat wel lastig.
>> 
>> Je kan die static methodes inline maken, als je echt denkt dat dat een
>> probleem is.
> 
> Dat helpt niet he: GekleurdeInt::fromInt(123) geeft een object als
> resultaat, inline of niet, en door foo = ... wordt heel dat object
> gekopieerd.

/* 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(1));
}

/* deel van test.s, gecompileerd met gcc 3.2, -O3, op een x86 ding */
.globl main
        .type   main,@function
main:
/* functie proloog */
.LFB1:
        pushl   %ebp
.LCFI0:
        movl    %esp, %ebp
.LCFI1:
        subl    $8, %esp
.LCFI2:
/* maak argumenten voor call naar bliep klaar */
        andl    $-16, %esp
        subl    $12, %esp
        leal    -4(%ebp), %edx
        pushl   %edx
        movl    $1, -4(%ebp)
.LCFI3:
/* doe call */
        call    _Z5bliepRK5Blaat
        xorl    %eax, %eax
        leave
        ret

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.

Nog iets dat ik eigenaardig vind: met -fomit-frame-pointer blijft de 
functie perfect hetzelfde, zou je dan niet verwachten dat die %ebp rommel 
weggegooid zou worden?

-- 
Nicolas Barbier
Technical Details
Message-ID: <3ed50561$0$6523$afc38c87@sisyphus.news.be.easynet.net>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-06!sn-xit-09!supernews.com!newsfeed.news2me.com!newsfeed.icl.net!newsfeed.fjserv.net!newsfeed.freenet.de!easynews.net!newsfeed3.easynews.net!feed1.news.be.easynet.net!sisyphus.news.be.easynet.net!not-for-mail
References: <3ed4a249.0@news.ruca.ua.ac.be> <aC2Ba.24224$1u5.1890@afrodite.telenet-ops.be> <874r3fnqqf.fsf@student.kuleuven.ac.be> <AT2Ba.24246$1u5.1895@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII
X-Google-Thread: fcea4,3077f069a49c0aca
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2003-05-28 11:52:28 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-06!sn-xit-09!supernews.com!newsfeed.news2me.com!newsfeed.icl.net!newsfeed.fjserv.net!newsfeed.freenet.de!easynews.net!newsfeed3.easynews.net!feed1.news.be.easynet.net!sisyphus.news.be.easynet.net!not-for-mail
Message-ID: <3ed50561$0$6523$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 20:51:32 +0200
References: <3ed4a249.0@news.ruca.ua.ac.be> <aC2Ba.24224$1u5.1890@afrodite.telenet-ops.be> <874r3fnqqf.fsf@student.kuleuven.ac.be> <AT2Ba.24246$1u5.1895@afrodite.telenet-ops.be>
User-Agent: KNode/0.6.1
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8Bit
Lines: 75
Organization: [ posted via Easynet Belgium ]
NNTP-Posting-Date: 28 May 2003 18:52:17 GMT
NNTP-Posting-Host: 213.193.182.106
X-Trace: 1054147937  6523 [::ffff:213.193.182.106]:33042
X-Complaints-To: abuse@be.easynet.net