Для чего-то такого простого, компилятор будет возможно сделать это во время компиляции. Фактически, компилятор, вероятно, сделает это во время компиляции даже без шаблонов, если все значения известны во время компиляции: т. Е. Если у нас есть inline float fraction(int A, int B)
, он, вероятно, сделает деление во время компиляции, если мы позвоним fraction(1,2)
.
Если вы хотите силы компилятор делать вещи во время компиляции, вам придется использовать некоторые шаблон метапрограммирование трюков, и я не уверен, что вы можете получить его на работу с арифметикой с плавающей точкой на все , Но вот простой пример методики:
// 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 стандарт не определяет это, и это зависит от флагов компилятора и оптимизации. – khachik
BTW, не забывайте, что вы можете проверить выход ассемблера своего компилятора. Вы спрашиваете о специфике компилятора, а не о языке. Моя ставка заключается в том, что хороший компилятор (особенно с оптимизацией) рассчитает во время компиляции все, что может. – Kos