Habituellement, vous devriez préférer std::string
sur les pointeurs à char lisse. Ici, cependant, le pointeur char initialisé avec la chaîne littérale a un avantage significatif.
Il existe deux initialisations pour les données statiques. L'une est appelée initialisation statique et l'autre est appelée initialisation dynamique. Pour les objets qui sont initialisés avec des expressions constantes et qui sont des POD (comme des pointeurs), C++ exige que leur initialisation se produise au tout début, avant l'initialisation dynamique. L'initialisation d'une telle chaîne std :: sera faite dynamiquement. Si vous avez un objet d'une classe étant un objet statique dans un fichier, et que vous avez besoin d'accéder à la chaîne lors de son initialisation, vous pouvez compter sur elle déjà configurée lorsque vous utilisez la version const char* const
, alors que en utilisant la version std::string
, qui n'est pas initialisée statiquement, vous ne savez pas si la chaîne est déjà initialisée, car l'ordre d'initialisation des objets entre les limites d'unité de traduction n'est pas défini.
comment cela est-il dérangeant? –