Russian Qt Forum
Ноябрь 23, 2024, 18:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему в С++ нельзя инициализировать статические переменные прямо в классе?...  (Прочитано 5360 раз)
yarick
Гость
« : Апрель 30, 2013, 08:25 »

Очень неудобно инициализировать статические переменные вне класса, особенно в h-файле.
Почему нельзя просто написать
Код:
class MyClass
{
  static int i = 100;
Я так надеялся, что в С++11 разрешат это... Но увы(( Обычные переменные так можно инициализировать а вот статические - нет?
Может быть есть какие-нибудь извращения/обходные пути? Или всё-таки смириться?

И раз уж на то пошло - давно хотел задать вопрос - а есть ли какие-нибудь "прекомпиляторы" для С++? Подобно qmake, которые добавляют новый синтаксис\элементы и переводят это в стандартный язык, типа ещё одна прослойка дополнительная?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 30, 2013, 08:30 »

Не пользуйся статическими переменными и не будет тебе проблем. Подмигивающий
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
yarick
Гость
« Ответ #2 : Апрель 30, 2013, 08:58 »

Спасибо за совет  Веселый
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #3 : Апрель 30, 2013, 09:47 »

Спасибо за совет  Веселый

Вообще-то он прав, статические переменные в основном используются для синглтонов, использование которых тоже, по возможности, надо избегать. Поэтому, не так уж и сложно инициализировать переменную отдельно ( int MyClass::staticField = 10; )
Записан

Гугль в помощь
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Апрель 30, 2013, 10:25 »

Очень неудобно инициализировать статические переменные вне класса, особенно в h-файле.
Почему нельзя просто написать
Код:
class MyClass
{
  static int i = 100;
Я так надеялся, что в С++11 разрешат это... Но увы(( Обычные переменные так можно инициализировать а вот статические - нет?
Может быть есть какие-нибудь извращения/обходные пути? Или всё-таки смириться?
Что неудобно? Напр захотели изменить начальное значение переменной. Если она в cpp - перекомпилируется один файл, а если бы в хедере - может и сотни файлов.

Вообще откуда такое горячее желание найти/применить нечто "особенное", "изысканное"? Улыбающийся Чем проще текст - тем лучше, это показатель класса.  А "наворотить" много ума не надо
Записан
nono
Гость
« Ответ #5 : Апрель 30, 2013, 20:28 »

Используй перечисления
class myclass
{
 enum {ONE = 10, TWO = 20};
}

...
    myclass::TWO;
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #6 : Апрель 30, 2013, 21:11 »

Используй перечисления
class myclass
{
 enum {ONE = 10, TWO = 20};
}

...
    myclass::TWO;

Перечисления здесь не помогут. Речь идёт не о статических константах..
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Syveren
Гость
« Ответ #7 : Май 02, 2013, 09:17 »

Меня это тоже напрягает) Намного удобней ИМХО иметь возможность инициировать переменную там же, где объявил (как в джаве).
Может для обратной совместимости такую возможность не добавляют или по какой другой причине?
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #8 : Май 02, 2013, 09:31 »

http://ru.wikipedia.org/wiki/%D0%95%D0%B4%D0%B8%D0%BD%D0%B8%D1%86%D0%B0_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%86%D0%B8%D0%B8
http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%BE_%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F
http://www.ozon.ru/context/detail/id/2576269/
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.