/
Forside
/
Teknologi
/
Udvikling
/
C/C++
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
C/C++
#
Navn
Point
1
BertelBra..
2425
2
pmbruun
695
3
Master_of..
501
4
jdjespers..
500
5
kyllekylle
500
6
Bech_bb
500
7
scootergr..
300
8
gibson
300
9
molokyle
287
10
strarup
270
ostrstring.freeze
Fra :
Byrial Jensen
Dato :
12-12-02 19:54
Jeg er i noget ældre C++-kode stødt på konstruktioner som den her:
ostrstream o;
o << "Some text";
o.freeze();
Jeg har forstået at ostrstream svarer til std::ostringstream i
standard C++, men hvilke forskelle skal man være opmærksom på når
man omskriver koden til standarden (f.eks. for at kunne oversætte
med en moderne oversætter)?
Hvad gør freeze() og hvordan gøres det tilsvarende i standard C++?
Igor V. Rafienko (
13-12-2002
)
Kommentar
Fra :
Igor V. Rafienko
Dato :
13-12-02 13:43
[ Byrial Jensen ]
[ ... ]
> ostrstream o;
> o << "Some text";
> o.freeze();
Legacy crap.
> Jeg har forstået at ostrstream svarer til std::ostringstream i
> standard C++, men hvilke forskelle skal man være opmærksom på når
> man omskriver koden til standarden (f.eks. for at kunne oversætte
> med en moderne oversætter)?
Siden ostrstream bygget på char-pekere, men all jævelskapet dette
medførte, måtte man av og til ty til veldig interessante tricks. Jeg
tror ikke du skal bekymre deg så veldig om ting som virket med
strstreams men vil slutte å virke med stringstreams (det er heller det
omvendte som er tilfellet). Du vil måtte muligens omskrive de delene
av koden som utnyttet adgang til den interne[*] char-bufferen på
ikke-trivielle vis.
> Hvad gør freeze() og hvordan gøres det tilsvarende i standard C++?
SVJS bruker man freeze for å sørge for at den underliggende[*]
char-bufferen blir hverken forandret eller deallokert (jeg lurer på
hvorfor/hvordan det skulle være nyttig, men siden man kan få en peker
til bufferen, og siden påfølgende IO operasjoner kan medføre
reallokering, så er det litt kjipt å sitte igjen med en peker til et
område som slutter å være gyldig uten at programmereren gjør noe
eksplisitt med den bufferen).
I moderne standard C++ har man ikke freeze -- den har liksom ikke noe
funksjon lenger, siden den type lavnivå minneadministrering håndteres
av std::string og siden det ikke er mulig å få tak i en peker til et
slik område for en stringstreambuf.
ivr
[*] "underliggende" i dette tilfellet betyr det bufferet som holder
data i en strstreambuf.
--
<peder> igorr: tcl ja... det er fra de dypeste avgrunnene i helvete det...
<peder> php er bare fra foajeen
-- pederst på irc
Søg
Alle emner
Teknologi
Udvikling
C/C++
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177558
Tips :
31968
Nyheder :
719565
Indlæg :
6408924
Brugere :
218888
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.