weil anderswo max(f(1), f(2))
eine der beiden Funktionen zweimal aufrufen würde:
statt durch "Caching" der beiden Werte in _a
und _b
, die Sie haben
(und klar, wie andere darauf hingewiesen haben, gibt es das gleiche Problem mit Autoinkrement / Autodekrement)
Ich denke nicht, dass dies von Visual Studio auf diese Weise unterstützt wird. Dies ist eine zusammengesetzte Aussage. Lesen Sie hier hat msvc analog zu gcc's ({})
Ich füge hinzu, dass die Definition der zusammengesetzten Anweisung im hier gegebenen gcc-Handbuch Ссылка zeigt einen Code sehr ähnlich dem der Frage für max: -)
Es geht um das Hauptproblem von Dingen wie
%Vor%wenn Sie es mit aufrufen:
%Vor%Da es sich um eine einfache Textersetzung handelt, ergibt sich:
%Vor%was ist nicht was Sie wollen.
Mit:
%Vor%verwendet temporäre Variablen, die Ihnen effektiv Folgendes bieten:
%Vor%welche die Nebenwirkungen nur einmal ausführt.
Aber um ehrlich zu sein, sollten Sie dieses Makro komplett ablehnen und eine inline
-Funktion oder sogar eine Nicht-Inline-Funktion verwenden, da der Compiler in den meisten Fällen eine anständige Optimierung vornehmen kann, sogar ohne diesen Vorschlag.