Gebruikersavatar
317070
Artikelen: 0
Berichten: 5.609
Lid geworden op: za 28 feb 2009, 17:05

Const bij een functie in c++

Ik weet wat dit wil zeggen:

Code: Selecteer alles

Str Str::operator +(const char*& s) const{

Str res = Str(_str);

return res.append(s);

}
Maar als er nu const voorkomt:

Code: Selecteer alles

const Str Str::operator +(const char*& s) const{

Str res = Str(_str);

return res.append(s);

}
Wat is het verschil?
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: Const bij een functie in c++

Het enige verschil is het type van de return waarde. Bij de eerste gewoon Str, bij de 2de const Str. Ben je overigens zeker dat de 2de code gecompileerd kan worden? Mij lijkt van niet.
Gebruikersavatar
317070
Artikelen: 0
Berichten: 5.609
Lid geworden op: za 28 feb 2009, 17:05

Re: Const bij een functie in c++

Beide compileren ;) (werken is nog iets anders, het zijn shallow copies), maar het was gewoon een vraag die bij me opkwam
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-
Gebruikersavatar
Rogier
Artikelen: 0
Berichten: 5.679
Lid geworden op: di 27 apr 2004, 13:40

Re: Const bij een functie in c++

Wat is het verschil?
Dat je in het tweede geval de gereturnde Str niet mag veranderen.

Wat mij enigszins onzinnig lijkt, want het is al een kopie (als je nu een const Str& zou returnen zou het wat anders zijn) en waar je die functie aanroept is de Str in kwestie een lokale variable. Maar dat mag natuurlijk wel.

Net zoals je ook best een lokale const int x=3 mag declareren. Enige verschil is dat je dan verderop niet x=4 mag doen, of x of &x mag meegeven in een functie met een (niet const) int reference of pointer als parameter.
In theory, there's no difference between theory and practice. In practice, there is.
Gebruikersavatar
317070
Artikelen: 0
Berichten: 5.609
Lid geworden op: za 28 feb 2009, 17:05

Re: Const bij een functie in c++

Een andere vraag:

Code: Selecteer alles

class Str{

private:

    char* _str;                //pointer to the string

    unsigned long int _length;

public:

    Str();

    Str(char*);

    Str(const Str&);

    ~Str(void);

    Str append(const Str&);

    Str append(const char*);

    char getCharAt(const unsigned long int )const;

    unsigned long int length(void)const;

    Str substring(const unsigned long int , const unsigned long int )const;

    char* toCharString()const;

    Str operator +(const Str&) const;

    Str operator +(const char*&) const;

    Str& operator =(const Str&);

    friend ostream& operator <<(ostream& outputStream, const Str&);

};
Hierin gaat hij bij mij nooit operator +(const char*&) gebruiiken, maar maakt hij er steeds een operator +(const Str&) en Str(char*) van?

Heeft er daar iemand een verklaring voor? Of is dit gewoon iets vreemd van de compiler?
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-
Gebruikersavatar
Rogier
Artikelen: 0
Berichten: 5.679
Lid geworden op: di 27 apr 2004, 13:40

Re: Const bij een functie in c++

317070 schreef:Een andere vraag:

Hierin gaat hij bij mij nooit operator +(const char*&) gebruiiken, maar maakt hij er steeds een operator +(const Str&) en Str(char*) van?

Heeft er daar iemand een verklaring voor? Of is dit gewoon iets vreemd van de compiler?
Hoe roep je die precies aan? Vanwaar die extra reference, bedoel je niet gewoon operator + (const char*) ?
In theory, there's no difference between theory and practice. In practice, there is.
Gebruikersavatar
317070
Artikelen: 0
Berichten: 5.609
Lid geworden op: za 28 feb 2009, 17:05

Re: Const bij een functie in c++

Juist: de testcode:

Code: Selecteer alles

int main(void){

Str b = Str("b");

b = b+"a";

}

Bij de b = b+"a"; hier, gaat hij eerst van die "a" een Str object maken, om dat operator+(Str&) te gebruiken, i.p.v. eenvoudigweg operator+(char*).

Heeft er iemand hier een verklaring voor?

P.S. char*& is inderdaad eenvoudigweg gelijk aan char*, dat lag aan een #define in de code...

Edit: hij neemt als je char* gebruikt wel de korte weg... het zal dus inderdaad wrs daar iets mee te maken hebben.
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-
Gebruikersavatar
Rogier
Artikelen: 0
Berichten: 5.679
Lid geworden op: di 27 apr 2004, 13:40

Re: Const bij een functie in c++

Ja dat komt dus doordat je een -zo te zien- zinloze reference erbij hebt staan.

Volgens mij moet je van die operator Str operator +(const char*) const; maken (zonder de &).
In theory, there's no difference between theory and practice. In practice, there is.

Terug naar “Informatica en programmeren”