[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] andre compilere end g++ ???



On Fri, Feb 07, 2003 at 09:07:01PM +0100, Marc Cromme wrote:
> > Et andet problem er også hvor
> > god compileren er til namespaces. Tag f.eks. flg. kode:
> > 
> > void func() 
> > {
> > 	mynamespace::type_t t;
> > 	some_function(t);
> > }
> > 
> > Her skal compileren både lede efter some_function i :: namespacet, og i
> > mynamespace. 
> 
> Jo - men programmøren burde jo gøre det oplagte at putte some_function
> også i mynamespace, og kalde den ved fulde navn, eller ved using
> mynamespace::some_function.  Det vil jeg betragte som god skik - ikke
> mindst for de næste der læser ens kode. Så det generer mig ikke at nogle
> kompilere ikke vil acceptere dette.
Det kan godt være at det er god skik, men ikke desto mindre er der en
del steder hvor det er rart at compileren gør det... Ikke mindst i
forbindelse med operatorer... Hvis du skriver

namespace mynamespace {
  typedef type_t et_eller_andet;
 
  type_t operator+(const type_t&, const type_t&);
};

Så er du jo interreseret i at du bare kan skrive:

void func(const mynamespace::type_t& t) {
  mynamespace::type_t t_times_2 = t + t;

}

Hvordan vil du gøre det, hvis compileren ikke ved at den skal lede efter
operator+ i både :: namespacet og mynamespace? Det skal så lige siges at
den eneste c++ compiler jeg er stødt på, som ikke kunne det er MSVC6, og
der virkede det aligevel nogen gange...

> Jeg synes faktisk at G++ er for god til det - jeg har ofte oplevet at den
> for eksempel tillader direkte at skrive til cout, selvom det rettelig
> burde hedde std::cout - og lignende ting. Jeg kunne godt tænke mig at den
> var lidt striksere på det punkt.
Det er kun ældre versioner af GCC, før 3.0. Grunden til at det har været
sådan, er at gamle (og her taler vi om meget gamle) gcc'ere ikke havde
namespace support, så derfor måtte de ligge hele STL implementationen ud
i :: namespacet. Det har de så bibeholdt indtil 3.0, for ikke at
ødelægge programmer der var skrevet til disse ældre versioner af GCC.

Men hvis man skal skrive portabel C++ kode med gcc, så er det > 3.0 man
skal have fat i.

-- 
/-----------------------------------------------------\
| Klaus S. Madsen      | "Failure is not an option... |
| ICQ: 45400164        |  It comes bundled with your  |
| www.hjernemadsen.org |  Microsoft products!"        |
\-----------------------------------------------------/


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:09 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *