Warum kompiliert der folgende Code ohne Warnungen. Beachten Sie, dass blablabla() nicht anywheh definiert ist.Warum "std :: string (blablabla());" kompilieren ohne Fehler?
I getestet und in gcc 5.1.0
clang-3.7.0
(mit und ohne die -std = C++ 11 flag).
#include <string>
int main()
{
std::string(blablabla());
}
Diese Frage ist nicht ein Duplikat der drängendsten Parst Mehrdeutigkeit, da verwandte Beispiele Funktionen mit einem Parameter deklarieren.
Wenn ich eine Rate wetten sollte, ist die Aussage optimiert, weil Sie es einfach in keiner Weise verwenden. Sie weisen die Zeichenfolge keiner Variablen zu und übergeben sie auch nicht an eine Funktion. Als solcher kann der Compiler es "übersehen". Aber das ist eine Vermutung. –
Warnungen sollten in jedem neueren Compiler unabhängig von * jeder * Optimierung sein. – Kamajii
Err, wenn 'blablabla()' eine Funktion wäre, die '' cout << "Hallo \ n"; ', wie würde diese Optimierung dann funktionieren? Ich bin mir ziemlich sicher, dass Sie Code nicht so optimieren dürfen, dass er das Verhalten grundlegend ändert. In jedem Fall ist es nicht * ruft * 'blablabla' auf, es gibt keinen Unterschied zwischen dieser Aussage und einer, bei der die äußeren Klammern entfernt wurden. – paxdiablo