Frage zu const (kann das gut gehen?)



  • Hi,
    ich hab grad was festgestellt, dass mich nen bissl verdutzt, entweder ich hab da mal was falsch mitbekommen oder irgendwas anderes läuft falsch.

    Ich wollte den von string.c_str() zurückgelieferten pointer in eine Variable packen, also dachte ich mir zuerst:

    char p_pw = pw.c_str();
    

    Da hat der Comp. gemeckert und der Fehlermeldung entsprechend habe ich dann ein const eingefügt (dachte nicht wirklich das es geht), umso erstaunter war ich dann als er es wirklích kompiliert und ausgeführt hat.

    (zum mitmeißeln):

    const char p_pw = pw.c_str();
    

    Also vermutlich hab ich was grundlegendes bei den const's missverstanden, bin mir aber nicht ganz sicher...
    Ich dachte eigtl. dass ne const nen Wert bekommen muss der von vorne herein feststeht.

    Könntet ihr mir bitte aufklärung verschaffen?

    THX
    Auron



  • Der Wert steht doch bereits zur Kompilierzeit fest: pw.c_str () und es wird niemals
    ein anderer werden.



  • c_str() liefert einen const char *,
    du hingegen verwendest einen const char.

    Devil



  • Ja "const char" deswegen weil du ja keine Kopie des Strings bekommst sondern eine konstante Referenz auf diesen.

    BTW: Mit "const char" hast du aber noch keinen String (Ein char bietet ja nur Platz für ein Zeichen). Damit du einen Zeiger auf das erste Element bekommst und damit auch den kompletten String musst du einen "const char*" also einen konstanten Zeiger auf einen char (in diesem Fall einen konstanten Zeiger auf das erste Element eines char-Arrays).

    Also:

    string mystr = "Hallo";
    const char* str = mystr.c_str();
    

    MfG SideWinder



  • ups, mein fehler... ich verwende const char*

    aber okay, zumindest bin ich nu aufgeklärt...

    thx



  • SirLant schrieb:

    Der Wert steht doch bereits zur Kompilierzeit fest: pw.c_str () und es wird niemals
    ein anderer werden.

    Da dieser Wert dynamisch ist kanns sehr wohl Unterschiede geben...

    const heißt einfach nicht, dass die Variable zur Compilezeit fix steht, sondern, dass sie einmal definiert nicht mehr verändert werden darf.

    Würde sie zur Compilezeit fix stehen, dürfte sich folgendes nicht compilieren lassen:

    char getachar ()
    {
        if(rand()%20 > 10)
            return 'A';
        return 'B';
    }
    
    int main ()
    {
        srand(time(0));
        const char c = getachar();
        cout << c;
    
        return(0);
    }
    

    Ist aber ohne Probleme compilierbar.

    MfG SideWinder



  • Edit: war murks


Anmelden zum Antworten