Für etwas so einfach, wird der Compiler wahrscheinlich es zur Kompilierzeit tun. Tatsächlich wird der Compiler wahrscheinlich zur Kompilierungszeit sogar ohne Templates tun, solange alle Werte zur Kompilierungszeit bekannt sind: d.h. wenn wir inline float fraction(int A, int B)
haben, wird es wahrscheinlich die Division zur Kompilierungszeit machen, wenn wir fraction(1,2)
aufrufen.
Wenn Sie Kraft wollen der Compiler Zeug zur Compile-Zeit zu tun, werden Sie einige Metaprogrammierung Tricks anwenden müssen, und ich bin nicht sicher, ob Sie es überhaupt mit Gleitkomma-Arithmetik zu arbeiten . Aber hier ist ein einfaches Beispiel für die Technik:
// Something similarly simple that doesn't use floating-point ;)
template <int A, int B>
struct Product {
enum { value = A * B };
};
// Later:
... Product<3, 4>::value ...
AFAIK der Standard definiert dies nicht und es hängt von den Compiler und Optimierungsflags ab. – khachik
BTW, vergessen Sie nicht, dass Sie die Assembler-Ausgabe Ihres Compilers überprüfen können. Sie fragen nach Compiler-spezifischen, nicht sprachspezifischen Dingen. Ich wette, dass ein guter Compiler (vor allem mit Optimierungen) in der Kompilierzeit alles was er kann berechnen kann. – Kos