Article View: be.comp.programming
Article #5843Re: Enkel voor C++ gurus
From: Bert Peers
Date: Thu, 06 Feb 2003 02:49
Date: Thu, 06 Feb 2003 02:49
46 lines
3103 bytes
3103 bytes
Andy Goossens wrote: >> Simon> (Test()); /* does not compile ---> why ??? >> > Om een object aan te maken met een constructor die geen parameters > neemt, mag je volgens de C++ standaard, geen haakjes gebruiken Tenzij het de instantiatie van een nameless temporary is op een plaats waar de compiler geen naamloze functie declaratie mag verwachten. Dus blijft de vraag waarom dit (Test()); een parse error geeft... Om het te parsen als declaratie van "een functie zonder parameter, die een Test returned" zou het nl. naamloos moeten mogen zijn; en daartoe moet dat hele geval bv zelf een parameter zijn in een functie declaratie, ie Test t (Test ()); // oeps, t == Test (*)(Test (*)()) Maw : > eentype eennaam( nogeentype() ); > > kan namelijk op ongeveer dezelfde manier zowel aanzien worden als een > functiedeclaratie van een functie met de naam "eennaam", die een > parameter van het type "nogeentype" aanneemt, en een "eentype" > teruggeeft. Ik vraag me nog steeds af waarom de compiler niet aan het > tweede paar haakjes kan zien dat het om een var-declaratie gaat, maar > euhm.. dat is dus blijkbaar niet zo.. ( ofwel is dat mss een bug in > gcc, ben ik ook al niet meer zeker van :) ) De haakjes helpen niet, omdat je de naam van een parameter bij een functie declaratie mag weglaten, bv int F (int); Om die reden kan die nogeentype() gelezen worden als zelf weer een declaratie van een (naamloze) functie die een nogeentype returned en geen parameters heeft. En die hele functie is dan weer het argument voor de functie eennaam. De regel is, als iets theoretisch ook maar _kan_ worden geparsed als een functie declaratie, _wordt_ het ook een functie declaratie (8.2.1). De truc is er extra haakjes rondgooien; of misschien beter, gewoon minder gecompresseerde code schrijven :) Bert
Technical Details
Message-ID:
<n0k0a.242$LG2.21161@news.chello.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!eusc.inter.net!easynews.net!newsfeed3.easynews.net!newsfeed.freenet.de!amsnews01.chello.com!news.chello.be.POSTED!not-for-mailReferences:
<qO6%9.25120$Jd.2730@afrodite.telenet-ops.be> <b1o26g$bd7$1@gaudi2.rug.ac.be> <873cn4ur50.fsf@appel.kotnet.org>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,dbfe1cfa4ee085e1 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2003-02-05 18:47:38 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!eusc.inter.net!easynews.net!newsfeed3.easynews.net!newsfeed.freenet.de!amsnews01.chello.com!news.chello.be.POSTED!not-for-mail From: Bert Peers <piek@ab.oo> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826 X-Accept-Language: en-us, en, ja MIME-Version: 1.0 Newsgroups: be.comp.programming Subject: Re: Enkel voor C++ gurus References: <qO6%9.25120$Jd.2730@afrodite.telenet-ops.be> <b1o26g$bd7$1@gaudi2.rug.ac.be> <873cn4ur50.fsf@appel.kotnet.org> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Lines: 47 Message-ID: <n0k0a.242$LG2.21161@news.chello.be> Date: Thu, 06 Feb 2003 03:49:53 +0100 NNTP-Posting-Host: 195.162.217.164 X-Complaints-To: abuse@chello.be X-Trace: news.chello.be 1044499603 195.162.217.164 (Thu, 06 Feb 2003 03:46:43 MET) NNTP-Posting-Date: Thu, 06 Feb 2003 03:46:43 MET Organization: Chello Belgium Usenet Service