Técnicamente Sí, es válido.
Las cadenas tienen durataion de almacenamiento estático.
Pero esa no es toda la historia.
Estos son C-Strings. La convención en C-Libraries y funciones es devolver una cadena asignada dinámicamente que debe ser liberada. es decir, un puntero devuelto devuelve implícitamente la propiedad a la persona que llama (como es habitual en C, también hay excepciones).
Si no sigue estas convenciones, confundirá a muchos C-Desarrolladores experimentados que esperarían esta convención. Si no sigue esta expectativa estándar, entonces debe estar bien documentada en el código.
También esto es C++ (según sus etiquetas). Por lo tanto, es más convencional devolver una std :: string. La razón de esto es que el paso de propiedad a través de punteros solo está implícito (y esto condujo a muchos errores en el código C si la expectativa anterior se rompiera pero estuviera documentada, desafortunadamente la documentación nunca fue leída por el usuario del código). Al usar std :: string está pasando un objeto y ya no se trata de la propiedad (el resultado se pasa como un valor y por lo tanto el suyo), pero como es un objeto, no hay preguntas ni problemas con la asignación de recursos. .
Si le preocupa la eficacia, creo que es una preocupación falsa.
Si desea que esta para imprimir a través de las corrientes ya existe una convención estándar para hacer eso:
std::cout << std::boolalpha << false << std::endl;
std::cout << std::boolalpha << true << std::endl;
Sí. Pero en C++ todavía deberías preferir std :: string. Vea abajo. –