В C++ 11 и С ++ 14, для чего необходимо constexpr
в следующем фрагменте:Постоянного выражения инициализатора для статического члена класса типа двойного
class Foo {
static constexpr double X = 0.75;
};
в то время как этот производит ошибку компиляции:
class Foo {
static const double X = 0.75;
};
и (более удивительно) компилируется без ошибок?
class Foo {
static const double X;
};
const double Foo::X = 0.75;
В основном совместимость с C++ 03, [здесь сводка] (http://stackoverflow.com/a/28846608/1708801) –
Один синтаксис для констант времени компиляции, отличный от синтаксиса для создания 'static' переменная-член, которая является 'const' с значением по умолчанию (и, следовательно, сингулярным). Возможно, часть логики здесь заключается в том, что const может быть нарушен, и если вы говорите, что хотите иметь возможность принять адрес вещи, вы, возможно, до таких махинаций. – kfsone
@Stefano Sanfilippo: Почему последний пример описывается как «более удивительный»? На самом деле это базовое поведение, существующее на языке с начала времен. – AnT