1 van 1

Const bij een functie in c++

Geplaatst: zo 21 jun 2009, 01:25
door 317070
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?

Re: Const bij een functie in c++

Geplaatst: zo 21 jun 2009, 12:49
door Cycloon
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.

Re: Const bij een functie in c++

Geplaatst: zo 21 jun 2009, 16:33
door 317070
Beide compileren ;) (werken is nog iets anders, het zijn shallow copies), maar het was gewoon een vraag die bij me opkwam

Re: Const bij een functie in c++

Geplaatst: zo 21 jun 2009, 16:58
door Rogier
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.

Re: Const bij een functie in c++

Geplaatst: zo 21 jun 2009, 17:28
door 317070
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?

Re: Const bij een functie in c++

Geplaatst: zo 21 jun 2009, 17:35
door Rogier
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*) ?

Re: Const bij een functie in c++

Geplaatst: zo 21 jun 2009, 18:13
door 317070
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.

Re: Const bij een functie in c++

Geplaatst: zo 21 jun 2009, 18:16
door Rogier
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 &).