Por lo general, debería preferir std::string
sobre los indicadores de caracteres simples. Aquí, sin embargo, el puntero char inicializado con el literal de cadena tiene un beneficio significativo.
Hay dos inicializaciones para datos estáticos. El uno se llama inicialización estática, y el otro se llama inicialización dinámica. Para aquellos objetos que se inicializan con expresiones constantes y que son POD (como punteros), C++ requiere que su inicialización ocurra desde el principio, antes de que ocurra la inicialización dinámica. La inicialización de std :: string se realizará de forma dinámica.
Si tiene un objeto de una clase que es un objeto estático en algún archivo, y que necesita acceder a la cadena durante su inicialización, puede confiar en que ya está configurado cuando usa la versión const char* const
, mientras utilizando la versión std::string
, que no se inicializa estáticamente, no se sabe si la cadena ya está inicializada, porque el orden de inicialización de los objetos a través de los límites de la unidad de traducción no está definido.
¿Cómo es eso perturbador? –