Springen naar inhoud

Const bij een functie in c++


  • Log in om te kunnen reageren

#1

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 21 juni 2009 - 00:25

Ik weet wat dit wil zeggen:

[codebox]Str Str::operator +(const char*& s) const{
Str res = Str(_str);
return res.append(s);
}[/codebox]

Maar als er nu const voorkomt:

[codebox]const Str Str::operator +(const char*& s) const{
Str res = Str(_str);
return res.append(s);
}[/codebox]

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-

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 21 juni 2009 - 11:49

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.

#3

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 21 juni 2009 - 15:33

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-

#4

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 21 juni 2009 - 15:58

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.

#5

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 21 juni 2009 - 16:28

Een andere vraag:
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-

#6

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 21 juni 2009 - 16:35

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.

#7

317070

    317070


  • >5k berichten
  • 5567 berichten
  • Moderator

Geplaatst op 21 juni 2009 - 17:13

Juist: de testcode:
[codebox]int main(void){
Str b = Str("b");
b = b+"a";
}
[/codebox]
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.

Veranderd door 317070, 21 juni 2009 - 17:17

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-

#8

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 21 juni 2009 - 17:16

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.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures