/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
array/pointer implict conversion spørgsmål
Fra : Thomas Schulz


Dato : 29-03-01 15:54

Jeg sidder og læser i "The C++ Programming Language - Special Edition" (af
Bjarne Stroustrup).
Rigtig god bog ( i hvert fald, hvis man ikke kender C++, men godt kender til
andre sprog).
På side 92 nævnes der et eksempel ala følgende:

void f()
{
char a[] = "test";
char* p = a;
strlen(a);
strlen(p);
}

Det eneste jeg havde ved hånden var en C-kompiler, og der lader "strlen" at
være defineret: unsigned int strlen(const char *);
Så vidt så godt... Bjarne skriver "strlen" både kan tage min "a" og "p" som
argument (a og p er navnene på variablerne fra ovenover), idet min "a"
automatisk implicit vil blive konverteret til pointer. Nu til mine
spørgsmål:

Det lader til, at dette ikke er gjort ved overloadede "strlen", men er det
compileren, der gør det så?
Hvis det er det sidste, strider det lidt imod, hvad jeg troede om, at C++
overlader så meget som muligt til libraries i stedet for at lave hokus-pokus
ting i compileren (men selvfølgelig C++ har jo skulle holde C kompabilitet).
Jeg formoder det er compileren i og med, at AFAIK så er arrays i C++
konstrueret således, at første element i arrayet er på samme addresse som
selve arrayet. Hvis det er korrekt, så adskiller det sig jo netop fra en
pointer, som først skal derefereres. Derfor kan jeg ikke se, hvordan begge
ting kan blive brugt som parameter uden compiler "magi".
Jeg gætter på at compiler magien er, at alle steder hvor man kun alene
angiver array (og ikke noget med [] bagefter), bliver det implicit
konverteret til pointer, men er det rigtigt?

Jeg kunne ikke rigtigt selv finde frem til og konkludere svarene på de
sidste 2 ting, da jeg ikke kunne få følgende testkode til at virke:
#include <stdio.h>
int main()
{
// (pascal dummie | C newbie) trying to figure out implementation of C
arrays
char *a;
char p1[] = "compare_addr";
*a = (&p1 == &p1[0]) ? 'y' : 'n';
printf(a);
return 1;
}


mvh.
Thomas Schulz



 
 
Kent Friis (29-03-2001)
Kommentar
Fra : Kent Friis


Dato : 29-03-01 17:44

Den Thu, 29 Mar 2001 16:53:39 +0200 skrev Thomas Schulz:
>Jeg sidder og læser i "The C++ Programming Language - Special Edition" (af
>Bjarne Stroustrup).
>Rigtig god bog ( i hvert fald, hvis man ikke kender C++, men godt kender til
>andre sprog).
>På side 92 nævnes der et eksempel ala følgende:
>
>void f()
>{
> char a[] = "test";
> char* p = a;
> strlen(a);
> strlen(p);
>}
>
>Det eneste jeg havde ved hånden var en C-kompiler, og der lader "strlen" at
>være defineret: unsigned int strlen(const char *);
>Så vidt så godt... Bjarne skriver "strlen" både kan tage min "a" og "p" som
>argument (a og p er navnene på variablerne fra ovenover), idet min "a"
>automatisk implicit vil blive konverteret til pointer. Nu til mine
>spørgsmål:
>
>Det lader til, at dette ikke er gjort ved overloadede "strlen", men er det
>compileren, der gør det så?

En pointer og et array er pr. definition det samme i C*

>Jeg kunne ikke rigtigt selv finde frem til og konkludere svarene på de
>sidste 2 ting, da jeg ikke kunne få følgende testkode til at virke:

>#include <stdio.h>
>int main()
>{
> // (pascal dummie | C newbie) trying to figure out implementation of C
>arrays
> char *a;

En pointer = NULL

> char p1[] = "compare_addr";

En streng

> *a = (&p1 == &p1[0]) ? 'y' : 'n';

Adresse 0 overskrives med 'y' eller 'n' med flg. resultat:

MS-DOS: Interrupttabellen er ødelagt, maskinen er død.
*nix: SIGSEGV: segmenation fault - core dumped.
Windows: Et sted mellem død maskine, blå skærm og "ulovlig handling",
afhængig af hvilken version.

> printf(a);
> return 1;
>}

Mvh
Kent
--
http://www.celebrityshine.com/~kfr - sidste billede: bay.png

Richard Flamsholt (29-03-2001)
Kommentar
Fra : Richard Flamsholt


Dato : 29-03-01 21:57

leeloo@mailandnews.com (Kent Friis) skrev:
>En pointer og et array er pr. definition det samme i C*

Per definition, ligefrem? Nej da. Så ville man jo fx kunne skrive

   extern char p[100];
   extern char *p;

- og den går ikke: et array og en pointer er absolut ikke det samme.

Men, en array-lvalue (dvs et array-navn, der optræder i et expression)
bliver stort set altid implicit konverteret til en pointer til det
første element i arrayet og derfor lider mange under den misforståelse,
at de er det samme. C-standarden (6.2.2.1) siger, at det sker undtagen
når array-variablen

- er en operand til sizeof, dvs sizeof(array)
- er en operand til &, dvs &array
- er en konstant streng (evt wide) brugt til initialisering
af et array, fx array[] = "hello world";

Bortset fra de tre tilfælde bliver et array altid konverteret til en
pointer til første element når det optræder i et expression. Men det
betyder altså ikke, at en array-variabel er det samme som en pointer-
variabel. Den forklaring besvarer i øvrigt også Thomas' oprindelige
spørgsmål.


>> char *a;
>> *a = (&p1 == &p1[0]) ? 'y' : 'n';
>
>Adresse 0 overskrives med 'y' eller 'n' [...]

Mjah, adresse 0 eller hvor den uinitialiserede a nu tilfældigvis peger
hen. Anyway, Thomas bør fjerne *'et foran a begge steder, for han har
kun behov for en char, ikke en pointer til en char.

>> printf(a);

- og så bruge printf("%d\n", a) i stedet.

--
Richard Flamsholt
richard@flamsholt.dk - www.richard.flamsholt.dk

Kent Friis (29-03-2001)
Kommentar
Fra : Kent Friis


Dato : 29-03-01 23:01

Den Thu, 29 Mar 2001 22:56:39 +0200 skrev Richard Flamsholt:
>leeloo@mailandnews.com (Kent Friis) skrev:
>>En pointer og et array er pr. definition det samme i C*
>
>Per definition, ligefrem? Nej da. Så ville man jo fx kunne skrive
>
>   extern char p[100];
>   extern char *p;
>
>- og den går ikke: et array og en pointer er absolut ikke det samme.
>
>Men, en array-lvalue (dvs et array-navn, der optræder i et expression)
>bliver stort set altid implicit konverteret til en pointer til det
>første element i arrayet og derfor lider mange under den misforståelse,
>at de er det samme. C-standarden (6.2.2.1) siger, at det sker undtagen
>når array-variablen
>
> - er en operand til sizeof, dvs sizeof(array)
> - er en operand til &, dvs &array
> - er en konstant streng (evt wide) brugt til initialisering
> af et array, fx array[] = "hello world";
>
>Bortset fra de tre tilfælde bliver et array altid konverteret til en
>pointer til første element når det optræder i et expression. Men det
>betyder altså ikke, at en array-variabel er det samme som en pointer-
>variabel. Den forklaring besvarer i øvrigt også Thomas' oprindelige
>spørgsmål.

Ok, det var en meget simplificeret udgave. Teknisk set har du ret.

>
>>> char *a;
>>> *a = (&p1 == &p1[0]) ? 'y' : 'n';
>>
>>Adresse 0 overskrives med 'y' eller 'n' [...]
>
>Mjah, adresse 0 eller hvor den uinitialiserede a nu tilfældigvis peger
>hen.

Jeg mener nu at have læst på LKML at C-standarden siger at variable
initialiseres til 0. Men det var måske kun globale variable?

>Anyway, Thomas bør fjerne *'et foran a begge steder, for han har
>kun behov for en char, ikke en pointer til en char.
>
>>> printf(a);
>
>- og så bruge printf("%d\n", a) i stedet.

Måske %c vil gøre det lidt mere læseligt

Mvh
Kent
--
http://www.celebrityshine.com/~kfr - sidste billede: paris.png
Fedt - ferie helt til 1/5 :-þ

Richard Flamsholt (30-03-2001)
Kommentar
Fra : Richard Flamsholt


Dato : 30-03-01 00:50

leeloo@mailandnews.com (Kent Friis) skrev:
>Ok, det var en meget simplificeret udgave. Teknisk set har du ret.

Jeg brokkede mig også kun fordi du sagde at de "per definition" var ens.

>Jeg mener nu at have læst på LKML at C-standarden siger at variable
>initialiseres til 0. Men det var måske kun globale variable?

Alle static variable initialiseres automatisk til 0. Alle andre variable
har en ukendt startværdi.
(For begge gælder naturligvis at man eksplicit kan initialisere dem til
en anden værdi)

>>- og så bruge printf("%d\n", a) i stedet.
>
>Måske %c vil gøre det lidt mere læseligt

Touché Ja, jeg glemte i skyndingen at han ville skrive et tegn ud,
og ikke en sand/falsk værdi.

--
Richard Flamsholt
richard@flamsholt.dk - www.richard.flamsholt.dk

Kent Friis (30-03-2001)
Kommentar
Fra : Kent Friis


Dato : 30-03-01 08:04

Den Fri, 30 Mar 2001 01:49:30 +0200 skrev Richard Flamsholt:
>leeloo@mailandnews.com (Kent Friis) skrev:
>>Ok, det var en meget simplificeret udgave. Teknisk set har du ret.
>
>Jeg brokkede mig også kun fordi du sagde at de "per definition" var ens.

Jeg må kunne undskylde mig med at jeg sad og halvsov - det er nok ikke
nogen god ide at forsøge at lære folk C, når jeg havde opgivet at
programmere mere igår, fordi jeg var for træt...

>>Jeg mener nu at have læst på LKML at C-standarden siger at variable
>>initialiseres til 0. Men det var måske kun globale variable?
>
>Alle static variable initialiseres automatisk til 0. Alle andre variable
>har en ukendt startværdi.

Makes sence. Det er alle dem der kun oprettes en gang. Variable på
stakken (og ditto malloc'ede) er kun 0, hvis programmet ikke har brugt
det område før. (og kun hvis OS'et rent faktisk ryder et hukommelses-
område før man får det tildelt).

Correct me if i'm wrong.

Mvh
Kent
--
http://www.celebrityshine.com/~kfr - sidste billede: paris.png
Fedt - ferie helt til 1/5 :-þ

Byrial Jensen (01-04-2001)
Kommentar
Fra : Byrial Jensen


Dato : 01-04-01 16:35

Richard Flamsholt <richard@flamsholt.dk> skrev:
>leeloo@mailandnews.com (Kent Friis) skrev:
>
>>Jeg mener nu at have læst på LKML at C-standarden siger at variable
>>initialiseres til 0. Men det var måske kun globale variable?
>
>Alle static variable initialiseres automatisk til 0. Alle andre variable
>har en ukendt startværdi.

Nej, ikke alle andre variable. Globale, ikke-statiske variable
initialiseres også til 0.

Kent Friis (01-04-2001)
Kommentar
Fra : Kent Friis


Dato : 01-04-01 17:47

Den Sun, 01 Apr 2001 15:35:13 GMT skrev Byrial Jensen:
>Richard Flamsholt <richard@flamsholt.dk> skrev:
>>leeloo@mailandnews.com (Kent Friis) skrev:
>>
>>>Jeg mener nu at have læst på LKML at C-standarden siger at variable
>>>initialiseres til 0. Men det var måske kun globale variable?
>>
>>Alle static variable initialiseres automatisk til 0. Alle andre variable
>>har en ukendt startværdi.
>
>Nej, ikke alle andre variable. Globale, ikke-statiske variable
>initialiseres også til 0.

Er globale variable ikke statiske?

Mvh
Kent
--
http://www.celebrityshine.com/~kfr - sidste billede: paris.png
Fedt - ferie helt til 1/5 :-þ

Byrial Jensen (03-04-2001)
Kommentar
Fra : Byrial Jensen


Dato : 03-04-01 22:17

Kent Friis <leeloo@mailandnews.com> skrev:
>Den Sun, 01 Apr 2001 15:35:13 GMT skrev Byrial Jensen:
>>Richard Flamsholt <richard@flamsholt.dk> skrev:
>>>Alle static variable initialiseres automatisk til 0. Alle andre variable
>>>har en ukendt startværdi.
>>
>>Nej, ikke alle andre variable. Globale, ikke-statiske variable
>>initialiseres også til 0.
>
>Er globale variable ikke statiske?

Ikke nødvendigvis. (Ordforklaring: Med statiske variable mener jeg
variable som er erklæret med brug af ordet "static". Med globale
variable mener jeg variable som ikke er erklæret inden i en funktion
og dermed ikke begrænset til at bruges inden for en enkelt
funktion).

En statisk global variabel kan, i modsætning til ikke-statiske
globale variable, kun bruges i den fil hvori den erklæret.

Igor V. Rafienko (04-04-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 04-04-01 13:16

* Byrial Jensen

> En statisk global variabel kan, i modsætning til ikke-statiske
> globale variable, kun bruges i den fil hvori den erklæret.


s/fil/translation unit/;





ivr
--
Death by snoo-snoo

Byrial Jensen (08-04-2001)
Kommentar
Fra : Byrial Jensen


Dato : 08-04-01 05:55

Igor V. Rafienko <igorr@ifi.uio.no> skrev:
>* Byrial Jensen
>
>> En statisk global variabel kan, i modsætning til ikke-statiske
>> globale variable, kun bruges i den fil hvori den erklæret.
>
>s/fil/translation unit/;

Ja, klart. Tak for rettelsen. (En "oversættelsesenhed" er resultatet
når en c-fil har gennemgået al præprocessing inkl. brug af
#include-direktiver).

Igor V. Rafienko (29-03-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 29-03-01 22:28

* Kent Friis

[snip]

> En pointer og et array er pr. definition det samme i C*


Dette er _feil_. P. van der Linden snakker om alle tilfellene der en
array og en pointer er like og ulike i "Expert C Programming: Deep C
Secrets". Ta en titt.


> >#include <stdio.h>
> >int main()
> >{
> > // (pascal dummie | C newbie) trying to figure out implementation of C
> >arrays
> > char *a;
>
> En pointer = NULL


Nei.


> > char p1[] = "compare_addr";
>
> En streng


En array.


> > *a = (&p1 == &p1[0]) ? 'y' : 'n';
>
> Adresse 0


Nei. En vilkårlig adresse som ikke trenger å være NULL (hint: a er
automatisk).

[snip]





ivr
--
Death by snoo-snoo

Claus Brinch Jensen (30-03-2001)
Kommentar
Fra : Claus Brinch Jensen


Dato : 30-03-01 00:01


"Kent Friis" <leeloo@mailandnews.com> wrote in message
news:99vop8$gcn$1@sunsite.dk...
> Den Thu, 29 Mar 2001 16:53:39 +0200 skrev Thomas Schulz:
>
> En pointer og et array er pr. definition det samme i C*
>
En ikke ualmindelig misforståelse, men følgende er en god illustration af at
det rent faktisk ikke er tilfældet.
---
char streng[] = "en streng";
char *p = streng;

sizeof(streng) = 10;
sizeof(p) = 4 // 32-bit addressering.

p = streng; // lovligt
streng = p; // ulovligt
---

Når et char array bruges i udtryk fungerer den i realiteten som en "char *
const", hvilket (læst bagfra) er en konstant pointer til char, alså en
pointer hvor pointer-adressen er konstant (og ikke det den peger på).

Claus



Kent Friis (30-03-2001)
Kommentar
Fra : Kent Friis


Dato : 30-03-01 08:06

Den Fri, 30 Mar 2001 01:00:58 +0200 skrev Claus Brinch Jensen:
>
>"Kent Friis" <leeloo@mailandnews.com> wrote in message
>news:99vop8$gcn$1@sunsite.dk...
>> Den Thu, 29 Mar 2001 16:53:39 +0200 skrev Thomas Schulz:
>>
>> En pointer og et array er pr. definition det samme i C*
>>
>En ikke ualmindelig misforståelse, men følgende er en god illustration af at
>det rent faktisk ikke er tilfældet.
>---
>char streng[] = "en streng";
>char *p = streng;
>
>sizeof(streng) = 10;
>sizeof(p) = 4 // 32-bit addressering.
>
>p = streng; // lovligt
>streng = p; // ulovligt
>---
>
>Når et char array bruges i udtryk fungerer den i realiteten som en "char *
>const", hvilket (læst bagfra) er en konstant pointer til char, alså en
>pointer hvor pointer-adressen er konstant (og ikke det den peger på).

Jeg kan kun give dig ret. Selvom jeg faktisk engang havde en lærer (på
datamatiker) der var helt sikker på at det var en forkert opsætning
i compileren der gjorde at flg. galv lvalue-fejl:

char streng[25];
streng++;

Mvh
Kent
--
http://www.celebrityshine.com/~kfr - sidste billede: paris.png
Fedt - ferie helt til 1/5 :-þ

Igor V. Rafienko (29-03-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 29-03-01 22:26

* Thomas Schulz


> void f()
> {
> char a[] = "test";
> char* p = a;
> strlen(a);
> strlen(p);
> }
>
> Det eneste jeg havde ved hånden var en C-kompiler, og der lader "strlen" at
> være defineret: unsigned int strlen(const char *);


Det er en pussig definisjon, men ok, la gå.


> Så vidt så godt... Bjarne skriver "strlen" både kan tage min "a" og
> "p" som argument (a og p er navnene på variablerne fra ovenover),
> idet min "a" automatisk implicit vil blive konverteret til pointer.
> Nu til mine spørgsmål:
>
> Det lader til, at dette ikke er gjort ved overloadede "strlen", men er det
> compileren, der gør det så?


I C familien settes det noen ganger likhetstegn mellom 2 _meget_
forskjellige begreper: en array og en pointer. Bl.a. idet man sender
en array som argument til en funskjon (fx. strlen) blir array'en
implisitt konvertert til en peker til det første elementet. Dette
heter "array to pointer conversion", iirc.


> Hvis det er det sidste, strider det lidt imod, hvad jeg troede om,
> at C++ overlader så meget som muligt til libraries i stedet for at
> lave hokus-pokus ting i compileren (men selvfølgelig C++ har jo
> skulle holde C kompabilitet).


For å si det på den pene måten: det er _mye_ dyp magi i en C++
kompilator. Implisitt konvertering kombinert med fx. templates gir
veldig innviklede regler ang. valg av funksjoner som skal kalles. Jeg
prøvde for en stund tilbake å forstå hvordan man _egentlig_ skulle
finne ut hvilken funksjon ble kallt gitt uttrykket "foo( expr1 )", men
jeg gav opp forholdsvis fort.


> Jeg formoder det er compileren i og med, at AFAIK så er arrays i C++
> konstrueret således, at første element i arrayet er på samme
> addresse som selve arrayet.


Generelt er arrays et litt mer komplisert begrep enn en rå adresse
til det første elementet. I en del språk er arrays egne objekter med
bl.a. dimensjoner, størrelser, index ranges og lignenede snacks pakket
inn i det objektet.

I C++ er det ingen slike krav i standarden og man velger (av en rekke
årsaker) å oversette alle referanser til en array direkte til
referanser til hukommelsen der elementene i array'en ligger.

Man kan gjerne si at 1. element i arrayen er på samme adresse som
selve arrayen (dog, jeg har aldri hørt noen si dette før).


> Hvis det er korrekt, så adskiller det sig jo netop fra en pointer,
> som først skal derefereres.


C++ har dessverre arvet en rekke uheldige egenskaper fra C. Implisitt
array to pointer conversion er en av disse.


> Derfor kan jeg ikke se, hvordan begge ting kan blive brugt som
> parameter uden compiler "magi". Jeg gætter på at compiler magien er,
> at alle steder hvor man kun alene angiver array (og ikke noget med
> [] bagefter), bliver det implicit konverteret til pointer, men er
> det rigtigt?


IIRC er dette riktig (orker ikke å lete i standarden etter alle
referanser). Dette gjelder definitivt for argumenter til funksjoner
(8.3.5, p 3).


> Jeg kunne ikke rigtigt selv finde frem til og konkludere svarene på de
> sidste 2 ting, da jeg ikke kunne få følgende testkode til at virke:
> #include <stdio.h>
> int main()
> {
> // (pascal dummie | C newbie) trying to figure out implementation
> // of C arrays
> char *a;
> char p1[] = "compare_addr";
> *a = (&p1 == &p1[0]) ? 'y' : 'n';
> printf(a);
> return 1;
> }


Dette er ikke helt riktig av flere grunner:

1. Legg merke til at variabelen a ikke peker på noe som helst. Og du
prøver å skrive en verdi på det stedet som a peker på (Kent Friis
påpekte feilaktig at a vil være NULL. Det trenger slettes ikke være
tilfellet)

2. Selv om du kunne skrive til et tilfeldig sted i minne (a inneholder
jo fremdeles søppel), ville ikke det hjelpe: man må avslutte
strenger med '\0' for printf/puts sitt vedkommende.

Det du vil skrive er typisk dette:


int
main()
{
char *a;
char p1[] = "flabba la dabba";

puts( &p1 == &p1[0] ? "yes" : "no" );
}   
   
Om du _insisterer_ på å skrive noe til a, så burde du allokere litt
plass først:


a = malloc( 10 );
if ( !a )
exit( 1 );

if ( &p1 == &p1[0] )
strcpy( a, "yes" );
else
strcpy( a, "no" );

puts( a );
free( a );


BTW, leker du først med C++, bør du droppe char* så fort som mulig til
fordel for std::string. B. Stroustrup er ikke akkurat flink til å
fokusere på dette punktet (strings er vel kap. 20 (21?)).





ivr
--
Death by snoo-snoo

Soeren Sandmann (30-03-2001)
Kommentar
Fra : Soeren Sandmann


Dato : 30-03-01 13:41

igorr@ifi.uio.no (Igor V. Rafienko) writes:

> BTW, leker du først med C++, bør du droppe char* så fort som mulig til
> fordel for std::string. B. Stroustrup er ikke akkurat flink til å
> fokusere på dette punktet (strings er vel kap. 20 (21?)).

En bog jeg har gavn af for tiden, er »Accelerated C++« af Andrew
Koenig og Barbara Moo. Forfatterne skriver selv at de fokuserer på de
mest brugbare dele af C++ fra starten. De mere bizarre
C-overleveringer bliver næsten ikke nævnt.

Morten Boysen (31-03-2001)
Kommentar
Fra : Morten Boysen


Dato : 31-03-01 00:00

"Soeren Sandmann" <sandmann@daimi.au.dk> wrote in message
news:ye8zoe3pgz3.fsf@vocta1.daimi.au.dk...
> En bog jeg har gavn af for tiden, er »Accelerated C++« af Andrew
> Koenig og Barbara Moo. Forfatterne skriver selv at de fokuserer på de
> mest brugbare dele af C++ fra starten. De mere bizarre
> C-overleveringer bliver næsten ikke nævnt.

I det hele taget er det en rigtig god bog. Den kan kun anbefales.


--
Morten Boysen



Claus Brinch Jensen (30-03-2001)
Kommentar
Fra : Claus Brinch Jensen


Dato : 30-03-01 20:19


"Igor V. Rafienko" <igorr@ifi.uio.no> wrote in message
news:xjv66gs1d49.fsf@kaldabras.ifi.uio.no...
> * Thomas Schulz
>
> BTW, leker du først med C++, bør du droppe char* så fort som mulig til
> fordel for std::string. B. Stroustrup er ikke akkurat flink til å
> fokusere på dette punktet (strings er vel kap. 20 (21?)).

Jeg er helt enig i at man bør bruge std::string i stedet for char*, men jeg
synes nu også at Stroustrup i høj grad lægger op til dette i sin bog.
I min udgave (3. udgave) starter han med at bruge std::string ret konsekvent
fra og med kapitel 3 (side 45) efter "notes to the reader" og et indledende
kapitel om de de forskellige konstruktioner i sproget.

Claus



Igor V. Rafienko (31-03-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 31-03-01 14:57

* Claus Brinch Jensen

[snip]

> Jeg er helt enig i at man bør bruge std::string i stedet for char*,
> men jeg synes nu også at Stroustrup i høj grad lægger op til dette i
> sin bog.


[labbe på lesesalen og hente TC++PL3ed]


> I min udgave (3. udgave) starter han med at bruge std::string ret
> konsekvent fra og med kapitel 3 (side 45) efter "notes to the
> reader" og et indledende kapitel om de de forskellige konstruktioner
> i sproget.


Kapittel 3 (såvel som 2) har imvho en veldig begrenset verdi for en
som ikke kan språket. Da jeg leste TC++PL3ed for første gang, kjente
jeg fx. ikke begrepet "iterator", og iterators, templates og deres
like falt ikke helt i smak. Etter å ha dillet litt med språket en
stund, falte behovet vekk fra å lese disse kapitlene.

Jeg begriper ærlig talt ikke hvorfor BS tok dem med.

Skikkelig behandling av std::string kommer ikke før kapittel 20. Det
er imvho litt sent (et annet meget godt spørsmål er hvordan man skulle
servere std::string, tatt i betraktning at dette ikke er en basaltype
(hvilket er synd)).





ivr
--
Death by snoo-snoo

Thomas Schulz (30-03-2001)
Kommentar
Fra : Thomas Schulz


Dato : 30-03-01 14:13

>..

Tak til alle for svarene :)
Jeg forstår begge ting nu (en "lidt" lam fejl i min sourcekode, det må_ være
fordi, at jeg ikke er vant til at se på C syntaks :).

mvh.
Thomas Schulz




Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste