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.
-
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?
-
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"
-
---