A gibt es irgendwelche g ++ Optionen, die falsche Initialisierung von std :: string mit NULL const char * erkennen können?Fehlerhafte std :: string Initialisierung mit NULL const char * mit Hilfe von g ++
war ich in den Prozess der einige int Felder in std :: string diejenigen drehen, das heißt:
struct Foo
{
int id;
Foo() : id(0) {}
};
... verwandelte sich in:
struct Foo
{
std::string id;
Foo() : id(0) {} //oooops!
};
ich ganz schlecht 'id' übersehen Initialisierung mit 0 und g ++ gab mir überhaupt keine Warnungen. Dieser Fehler wurde in der Laufzeit entdeckt (std :: string Konstruktor hat eine Exception geworfen), aber ich würde gerne solche Sachen in der Kompilierzeit finden. Gibt es irgendeinen Weg?
Leider ist 0 der einzige Wert, der bei einer ungültigen Konvertierung von int in pointer keinen Fehler auslöst. Natürlich ist 0 eine Null-Zeiger-Konstante und kann daher in jeden beliebigen Zeigertyp umgewandelt werden. Ich weiß nichts von dem, was Sie tun können, außer wie der Besucher sagt, schreiben Sie diesen Initialisierer überhaupt nicht. –
Die richtige Lösung wäre gewesen, einen privaten Konstruktor 'std :: string :: string (int);' hinzuzufügen. Das wäre eine bessere Übereinstimmung und verursacht daher einen Kompilierungsfehler. – MSalters
Nicht sicher, ob Sie es so gemeint haben, aber das könnte tatsächlich funktionieren, als ein einmaliger Test, um irgendwelche Fehler zu finden, die aus dieser Runde von Änderungen von "int" zu "string" resultieren. Ändern Sie 'std :: basic_string' in den Standard-Kopfzeilen von g ++, überprüfen Sie, dass der neue Code kompiliert wird, und ändern Sie ihn dann schnell zurück, bevor irgendjemand es bemerkt. –