У PHP та C # константи можуть бути ініціалізовані, коли вони оголошені:
class Calendar3
{
const int value1 = 12;
const double value2 = 0.001;
}
У мене є така декларація С ++ функтора, яка використовується з іншим класом для порівняння двох математичних векторів:
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
чи ні. Ніколи не дозволяйте лексичній лінощі вирішувати семантику вашого коду.