Normalerweise sollten Sie Folgendes bevorzugen std::string
über einfache Char-Zeiger. Hier hat der mit dem String-Literal initialisierte char-Zeiger jedoch einen erheblichen Vorteil.
Es gibt zwei Initialisierungen für statische Daten. Die eine wird als statische Initialisierung bezeichnet, die andere als dynamische Initialisierung. Bei Objekten, die mit konstanten Ausdrücken initialisiert werden und die PODs sind (wie Zeiger), verlangt C++, dass ihre Initialisierung ganz am Anfang erfolgt, bevor die dynamische Initialisierung stattfindet. Die Initialisierung eines solchen std::string wird dynamisch durchgeführt.
Wenn Sie ein Objekt einer Klasse haben, das ein statisches Objekt in einer Datei ist, und das während seiner Initialisierung auf die Zeichenkette zugreifen muss, können Sie sich darauf verlassen, dass es bereits eingerichtet ist, wenn Sie die const char* const
Version, während bei der Verwendung der std::string
Version, die nicht statisch initialisiert wird, wissen Sie nicht, ob die Zeichenkette bereits initialisiert ist, da die Reihenfolge der Initialisierung von Objekten über die Grenzen von Übersetzungseinheiten hinweg nicht definiert ist.