Archief - [PROG] c++

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Banemus

Legacy Member
const Counter& Counter::operator++(){
++itsVal;
return *this;
}

wrm const Counter& Counter::...
en niet Counter& Counter::...

veiligheid??

Banemus

Legacy Member
.Acku. zei:
ie heeft de fout weg ge-edit zonder iets te zeggen :(
er was geen fout ... jij hebt mijn uitleg gewoon verkeerd begrepen :)
er stond dat je verwijzing van een reference NOOIT kunt veranderen ...
de value er achter kun je veranderen maar das de value naar waar de reference wijst
kzou ni weten wrm jij "by reference kun je veranderen by value niet" zegt :) maar dat had er weinig met te maken bij mijn vraag

Banemus

Legacy Member
en het antwoord op mijn vraag is dus gewoon vooral voor de beveiliging dat die const er staat

Vich

Legacy Member
Emotions zei:
er was geen fout ... jij hebt mijn uitleg gewoon verkeerd begrepen :)
er stond dat je verwijzing van een reference NOOIT kunt veranderen ...
de value er achter kun je veranderen maar das de value naar waar de reference wijst
kzou ni weten wrm jij "by reference kun je veranderen by value niet" zegt :) maar dat had er weinig met te maken bij mijn vraag
[offtopic]Ik las het zo - net als acku waarschijnlijk - dat je het object achter die reference niet kon veranderen en dat zou wel fout geweest zijn.[/offtopic]

killgore

Legacy Member
die staat er echt vo niets zeg ik u :p

Werk met zowel & en zonder & en da geeft hetzelfde effect bij mijn weten, toch als die const er staat :).

trouwens: in principe is & "onveiliger" als een gewone value return he ;).

Banemus

Legacy Member
gij kunt da gerust doen die & weg laten ... maar op performance vlak is & beter ... anders maak je een copy van het object en nu niet

btw dit is maar een klein voorbeeldje he ...:)
om de vraag een beetje duidelijk te maken :d

killgore

Legacy Member
eerst was het veiligheid

nu performance ...

Door die const er voor te plaatsen gaat zelfs die pass-by-reference vaak geen performance winst geven.
Daarnaast is het kopiëren van wat geheugen echt geen immense speed-bug ze :p.

BuiZe

Legacy Member
Wel als dat een groot object is waarop een deep copy wordt gemaakt.

Voor de rest weet ik niet waar julle het allemaal over hebben, maar als reactie op de huidige eerste post: door een const referentie terug te geven kan je binnen een statement geen verdere wijzigingen aanbrengen aan dat object. Geen idee welke operaties er nog mee mogelijk zijn, maar ++++counter; wordt alvast niet meer toegestaan.

Algemeen gesproken is het een goed idee om met referenties te werken waar mogelijk (performance), en bij voorkeur nog const referenties om controle te bewaren over welke methodes wijzigingen kunnen veroorzaken (veiligheid).

killgore

Legacy Member
Counter a = ...;
...
Counter b = a++;

gaat door die const volgens mij wél een copy doen (nu ja, zal van compiler afhangen).

BuiZe

Legacy Member
Van zodra je schrijft Counter b = ... voer je de copyconstructor uit. Dan ontstaat een nieuw mutable object, ongeacht hoe operator++() gedefinieerd is:
const Counter& operator++()
Counter& operator++()
const Counter operator++()
Counter operator++()

Deze code geeft echter wel een verdoken verschil:

++(++(++c));
// indien Counter& operator++() -> operatie telkens op hetzelfde object, teller c is met 3 verhoogd.
// indien Counter operator++() -> er wordt 2 keer een nieuw object aangemaakt, de waarde in c is maar met eentje verhoogd.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan