2011-03-13 13 views
10

Escribo una función como parte de un experimento con Boost.Interprocess. En la función, asigno un literal de cadena a una variable declarada constexpr char*. Cuando hago esto, obtengo:constexpr y advertencia de conversión obsoleta

warning: deprecated conversion from string constant to char* [-Wwrite-strings].

Mi comprensión de constexpr es que en una declaración de variable se comporta como si la variable fuera declarada const, pero con la estipulación añadida de que la variable debe inicializarse, y esa inicialización debe ser con una expresión constante.

Con este entendimiento esperaría que constexpr char* se comporte como const char*, y por lo tanto no emita la advertencia. ¿Me falta algo sobre cómo funciona constexpr?

Estoy compilando con GCC 4.6.0 20110306 usando -std = C++ 0x.

Se agradecerá cualquier razonamiento para la advertencia emitida. ¡Gracias!

Respuesta

10

El const de constexpr haría su variable char* const.

Todavía tiene el problema de que la cadena literal es const char y que la conversión de su dirección a char* está permitida, pero obsoleta.

+1

Gracias. Pasé por alto el otro 'const' de punteros. Cambié la declaración a 'constexpr const char *' y la advertencia desapareció. ¡Gracias! – mmoran

6

Por otra solución para esto:

lugar de-

constexpr char* foo = "bar"; 

Puede hacer-

constexpr char foo[] = "bar"; 

Esto también se librará de la advertencia.

Cuestiones relacionadas