¿Hay alguna opción de g ++ que pueda detectar una inicialización incorrecta de std :: string con NULL const char *?Evitando la inicialización incorrecta de std :: string con NULL const char * usando g ++
yo estaba en el proceso de convertir algunos campos int en los std :: string, es decir:
struct Foo
{
int id;
Foo() : id(0) {}
};
... convirtió en:
struct Foo
{
std::string id;
Foo() : id(0) {} //oooops!
};
pasé por alto completamente malas 'id' la inicialización con 0 y g ++ no me dio ninguna advertencia. Este error se detectó en el tiempo de ejecución (std :: string constructor arrojó una excepción) pero realmente me gustaría detectar ese tipo de cosas en el tiempo de compilación. ¿Hay alguna manera?
Desafortunadamente, 0 es el único valor que no generará un error para una conversión inválida de int a puntero. Porque, por supuesto, 0 es una constante de puntero nulo, por lo que es convertible a cualquier tipo de puntero. No sé nada de lo que puedas hacer excepto, como dice el visitante, no escribir ese inicializador en primer lugar. –
La solución adecuada habría sido agregar un constructor privado 'std :: string :: string (int);'. Eso sería una mejor coincidencia, y por lo tanto causar un error en tiempo de compilación. – MSalters
No estoy seguro de si lo decía de esta manera, pero en realidad podría funcionar, como una prueba única para detectar cualquier error resultante de esta ronda de cambios de 'int' a' cadena'. Modifique 'std :: basic_string' en los encabezados estándar de g ++, verifique que el nuevo código compila, luego cámbielo rápidamente antes de que nadie lo note. –