std::string und char[]



  • Hallo verbraucht

    std::string var = "ABC";
    

    hier genauso viel Speicherplatz wie

    char array[]="ABC";
    

    ?

    #include <iostream>
    
    int main(int argc, char* argv[])
    {
    
    std::string var = "ABC";
    char array[] = "ABC";
    
    std::cout<< var.c_str() << std::endl;
    std::cout<< array << std::endl;
    
    std::system("PAUSE");
    }
    


  • _var schrieb:

    ..

    std::string dürfte etwas mehr verbrauchen, aber im Endeffekt ist das sehr irrelevant.



  • Geringfügig mehr, allerdings hast du am Ende etliche vorteile, wenn du die Std::string-Klasse verwendest. Daher : möglichst immer verwenden in c++



  • Wenn du schon C-Strings benutzt, dann richtig:

    const char *array="ABC";
    

    Nachteile fallen mir keine ein, denn du kannst fast nichts falsch machen. Sobald du dynamische Strings willst, bist du bei std::string natürlich besser aufgehoben, aber sonst IMHO nicht.



  • _var schrieb:

    Hallo verbraucht

    std::string var = "ABC";
    

    hier genauso viel Speicherplatz wie

    char array[]="ABC";
    

    ?

    char[] "verbraucht" hier vermutlich 3 Bytes Nutzdaten plus 5 Bytes Alignmentverschnitt.

    string nimmt wohl 3 Bytes Nutzdaten, 2*4 für Heapverlinkung, aufgerundet auf 32 allocation granularity. Dazu noch 4 oder 8 Bytes für das String-Objekt selber und evtl nochmal 4 bis 16 Bytes für ein cow-Zwischenobjekt.

    Solange man nicht gerade mit der 640k-Beschränkung von DOS leben muß, ist es recht egal.


  • Mod

    Vbvb schrieb:

    Wenn du schon C-Strings benutzt, dann richtig:

    const char *array="ABC";
    

    Nachteile fallen mir keine ein, denn du kannst fast nichts falsch machen. Sobald du dynamische Strings willst, bist du bei std::string natürlich besser aufgehoben, aber sonst IMHO nicht.

    Da besteht aber ein gewaltiger Unterschied zwischen
    `const char *array="ABC";

    undconst char array[]="ABC";edit: undchar array[]="ABC";`
    Ich hoffe, du kennst diesen, wenn du solche Tipps gibst.



  • std::string dürfte etwas mehr verbrauchen, aber im Endeffekt ist das sehr irrelevant.

    Geringfügig mehr, allerdings hast du am Ende etliche vorteile, wenn du die Std::string-Klasse verwendest. ((Daher : möglichst immer verwenden in c++))

    Den Beiden stimm ich zu. 👍



  • Da besteht aber ein gewaltiger Unterschied zwischen
    const char *array="ABC"; und
    const char array[]="ABC";
    edit: und char array[]="ABC";
    Ich hoffe, du kennst diesen, wenn du solche Tipps gibst.

    Was sind das denn für Unterschiede?


  • Mod

    Das erste ist ein Zeiger auf ein Literal, das zweite ist ein Array const char[4] mit konstantem Inhalt "ABC\0", das dritte ist ein nicht konstantes Array char[4] mit Inhalt "ABC\0"



  • ---


Anmelden zum Antworten