Zwykle powinieneś preferować std::string
nad prostymi znakami char. Tutaj jednak wskaźnik znakowy zainicjalizowany literałem łańcuchowym ma znaczną korzyść.
Istnieją dwie inicjalizacje dla danych statycznych. Ten nazywa się inicjalizacją statyczną, a drugi nazywa się inicjalizacją dynamiczną. W przypadku obiektów zainicjalizowanych za pomocą wyrażeń stałych oraz POD (takich jak wskaźniki), C++ wymaga, aby ich inicjalizacja odbywała się na samym początku, zanim nastąpi inicjalizacja dynamiczna. Inicjowanie takiego std :: string będzie wykonywane dynamicznie.
Jeśli obiekt klasy jest statycznym obiektem w jakimś pliku, a ten musi uzyskać dostęp do ciągu znaków podczas jego inicjowania, możesz polegać na tym, że jest on już skonfigurowany, gdy używasz wersji const char* const
, podczas gdy używając wersji std::string
, która nie jest zainicjalizowana statycznie, nie wiadomo, czy łańcuch znaków jest już zainicjowany - ponieważ kolejność inicjowania obiektów przez granice jednostki tłumaczeniowej nie jest zdefiniowana.
jak to przeszkadza? –