В PHP и C # константы могут быть инициализированы по мере их объявления:
class Calendar3
{
const int value1 = 12;
const double value2 = 0.001;
}
У меня есть следующее объявление C ++ функтора, которое используется с другим классом для сравнения двух математических векторов:
struct equal_vec
{
bool operator() (const Vector3D& a, const Vector3D& b) const
{
Vector3D dist = b - a;
return ( dist.length2() <= tolerance );
}
static const float tolerance = 0.001;
};
Этот код без проблем компилировался с g ++. Теперь в режиме C ++ 0x (-std = c ++ 0x) компилятор g ++ выдает сообщение об ошибке:
ошибка: 'constexpr' необходим для внутриклассной инициализации статического элемента данных 'толерантность' нецелого типа
Я знаю, что могу определить и инициализировать этот static const
член вне определения класса. Кроме того, нестатический постоянный член данных может быть инициализирован в списке инициализаторов конструктора.
Но есть ли способ инициализировать константу в объявлении класса, как это возможно в PHP или C #?
Обновить
Я использовал static
ключевое слово только потому, что можно было инициализировать такие константы в объявлении класса в g ++. Мне просто нужен способ инициализировать константу в объявлении класса, независимо от того, объявлено оно как static
или нет.
I used static keyword just because it was possible to initialize such constants within the class declaration in g++. I just need a way to initialize a constant in a class declaration no matter if it declared as static or not.
Это неправильный способ решать, быть участникомstatic
или нет. Никогда не позволяйте лексической лени определять семантику вашего кода.