Я хочу сравнить мета-программирование и использование constexpr в C++ 0x. , тогда я пишу функцию fib в обеих моделях. Когда я использую модель метапрограмм, ответ распечатывается очень быстро, потому что он вычисляется во время компиляции. но когда я использую функцию constexpr, он вычисляет значение во время выполнения, а не во время компиляции. Я использую g ++ (gcc) 4.8. Может ли кто-нибудь помочь мне?Функция constexpr не вычисляет значение во время компиляции
#include <iostream>
using namespace std;
#define NUM 42
template <unsigned int N>
struct Fibonacci {
enum { value = Fibonacci<N - 1>::value + Fibonacci<N - 2>::value };
};
template <>
struct Fibonacci<1> {
enum { value = 1 };
};
template <>
struct Fibonacci<0> {
enum { value = 1 };
};
constexpr unsigned int fib(unsigned int n)
{
return (n > 1 ? fib(n-1) + fib(n-2) : 1);
}
int main()
{
cout << "Meta_fib(NUM) : " << Fibonacci<NUM>::value << endl; // compile time :)
cout << "Constexpr_fib(NUM) : " << fib(NUM) << endl; // run time :-?
return 0;
}
[Оба выглядят время компиляции для меня.] (Http://coliru.stacked-crooked.com/a/5fe7e66ca805e846) – chris
Не идея constexpr заключается в том, что она работает во время компиляции? –
Как вы знаете, что он вычисляет значение во время выполнения? Вы посмотрели на сборку? – juanchopanza