Article View: be.comp.programming
Article #5089Re: [C++] function overloading en typedef
From: Nicolas Barbier
Date: Wed, 28 May 2003 18:51
Date: Wed, 28 May 2003 18:51
75 lines
3104 bytes
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-mailReferences:
<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