Tak for svarene...
Jeg skal læse lidt C++ endnu før jeg får det fulde udbytte dine
kodeeksempler...
Med venlig hilsen
Torben W. Hansen
"Mogens Hansen" <mogens_h@dk-online.dk> skrev i en meddelelse
news:ag347m$lbo$1@news.cybercity.dk...
>
> "Torben W. Hansen" <mail@ins-intersoft.com> wrote
>
> [snip]
> > Dvs. at "inline" er en form for makro definitioner, hvor kode indsættes
> (af
> > pre-processor ?) frem for at foretage et funktionskald (iflg. Igor -
hvis
> > kompileren altså har valgt at tage "inline" til efterretning).
>
> Sådan kan man godt se det, blot man ikke tager det for bogstaveligt.
> "inline" kan også opfattes som et af de steder, hvor C++ tilbyder et
> alternativ til anvendelse af preprocessor makroer.
> "inline" funktioner overholder alle regler som ikke "inline" funktioner -
> f.eks. scope.
>
> Tag følgende 2 implementeringer af "max" (som ikke er compileret, så der
kan
> være småfejl)
>
> <med "inline">
>
> template <class T>
> inline T max(const T& t1, const T& t2)
> {
> return t1 > t2 ? t1 : t2;
> }
>
> void foo()
> {
> int a = 1;
> int b = 2;
> int c = max(a++, b++);
> assert(2 == a); // No problem
> assert(3 == b); // No problem
> assert(2 == c); // No problem
> }
>
> </med "inline">
>
> <med preprocessor macro>
>
> #define max(t1, t2) (t1 > t2 ? t1 : t2)
>
> void foo()
> {
> int a = 1;
> int b = 2;
> int c = max(a++, b++); // same as c = (a++ > b++ ? a++ : b++);
> assert(2 == a); // No problem
> assert(4 == b); // Ups - b++ evaluated twice!
> assert(3 == c); // Ups
> }
>
> </med preprocessor macro>
>
> Så vidt jeg husker Kris Jamsa ret glad for at bruge preprocessoren - også
> til ting, hvor andre langt bedre konstruktioner ligger lige for.
> Se f.eks. mine tidligere kommentarer
>
http://groups.google.com/groups?q=%22Mogens+Hansen%22+dansk&hl=da&scoring=d&
> selm=9uj6rp%242qqf%241%40news.cybercity.dk&rnum=3
>
> >
> > og "<xxx>" specificerer den aktuelle type for en funktions-skabelonen.
> (jeg
> > var endnu ikke nået til "templates" i min bog, men smugkikkede efter
jeres
> > svar).
>
> Blot var det væsentlige, som Igor V. Rafienko også sagde, i den kode du
> spurgte til ikke "<char*>" men "reinterpret_cast", som ikke er en template
> funktion.
> "reinterpret_cast<char*>" er en måde at sige til kompileren, at "på den
> adresse tager jeg som programmør ansvaret for at man læse en char*, og få
så
> dit typesystem til at holde op med at brokke sig!".
>
> [snip]
> > Til Mogens:
> > Jeg har noteret mig dine foreslag til bøger, som du også nævnte
tidligere.
> > Iøvrigt - går du og pønser på at skrive en dansk C++ bog ?
>
> Nej, det har jeg simpelthen ikke tid til.
> Men når det er sagt, så ville jeg ønske at der var blot een god, moderne
> introduktion til C++, så nytilkomne kan komme godt igang, inden de begiver
> sig ud i den lange række af gode engelske bøger der findes..
> Det er min klare opfattelse at der er et væsentligt potentiale for at
> forbedre undervisningen i C++ i Danmark. Det generer mig når jeg ser
> eksempler på elendig og inkompetent formidling. Jeg syntes at det er
> skammeligt for dem, der som individer bliver udsat for dårlig undervisning
> og for samfundet der betaler for det. Det er en væsentlig grund til at jeg
> orker at svare på spørgsmål i denne nyhedsgruppe.
>
> [snip]
> > Som jeg forstår skulle "Accelerated C++" være en af de bedre og Biblen
> "The
> > C++ Programming Language" af B.S. , men hvilken bog kan du da anbefale?
>
> Hvis du hurtigt vil se hvordan man kan skrive pæne, moderne og nyttige
> programmer i C++, så tag "Accelerated C++" i den sikre forvisning om at
hvis
> man vil lære C++ virkeligt seriøst så slipper man ikke uden om "The C++
> Programming Language".
>
> Venlig hilsen
>
> Mogens Hansen
>
>