Betrachten Sie den folgenden Code ein:Warum markiert clang oder gcc diese implizite Konvertierung von double in int nicht?
void f(int x)
{
std::cout << x << std::endl;
}
int main()
{
double x = 1.5;
f(x);
return 0;
}
Dies kompiliert und läuft ohne Warnungen (mit -Wall) und daher verbirgt sich eine gefährliche implizite Umwandlung von Doppel in int. Der Compiler wird die Umwandlung abfangen, wenn die Funktion mit einem Literal aufgerufen wird, d. H. Das ist nicht besonders nützlich. Warum warnen diese Compiler nicht für diese Besetzung? Ich bin auf OSX 10.8.3 mit gcc-4.2.1 und clang-425.0.28.
Es gibt das '-Wconversion'-Flag, aber das wird nur von gcc 4.3 unterstützt. –
Das funktionierte tatsächlich (unter Klirren) - warum sollte diese Flagge nicht in -Wall enthalten sein? – giogadi
Es kann Warnungen für gültigen Code erzeugen, und es gibt eine Menge Code, der implizite Konvertierungen verwendet. –