Я хочу играть с constexpr
, не поддерживает ли какой-либо его компилятор?
Поддерживает ли какой-либо компилятор constexpr еще?
Ответ 1
В проекте Apache Stdcxx есть хорошая таблица, в которой описываются функции С++ 0x, с помощью которых компиляторы. Он был обновлен на регулярной основе и охватывает большинство современных компиляторов С++.
В соответствии с этим только GCC 4.5 поддерживает constexpr
(обратите внимание, что эта поддержка может быть экспериментальной).
Между этим списком и тем, что было сказано в комментариях, кажется, что ответ "нет".
Ответ 2
По состоянию на июль 2011 года gcc 4.7 поддерживает constexpr. Вы должны построить его из svn, хотя.
Ответ 3
Согласовано, g++ 4.5 и 4.6 поддерживают ключевое слово, но игнорируют последствия. Я просто скомпилировал простую факториальную программу (в обеих версиях с использованием -std = С++ 0x) с линией:
constexpr fact(int i) { return (i>1) ? fact(i-1)*i : 1; }
и он скомпилирован и запущен, но при исследовании источника asm (-S) он показал, что функция вызывается с параметром, а не определяется компилятором.
Ответ 4
Использование "constexpr" очень просто. Посмотрите на этот фрагмент кода:
constexpr int get_five(){
return 5;}
Эта функция возвращает всегда 5, поэтому ее можно объявить с помощью ключевого слова "constexpr". Но факторная функция возвращает значение в зависимости от аргумента, поэтому его "вывод" не всегда один и тот же.