Russian Qt Forum

Qt => Общие вопросы => Тема начата: yarick от Апрель 30, 2013, 08:25



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

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


Название: Re: Почему в С++ нельзя инициализировать статические переменные прямо в классе?...
Отправлено: Пантер от Апрель 30, 2013, 08:30
Не пользуйся статическими переменными и не будет тебе проблем. ;)


Название: Re: Почему в С++ нельзя инициализировать статические переменные прямо в классе?...
Отправлено: yarick от Апрель 30, 2013, 08:58
Спасибо за совет  :D


Название: Re: Почему в С++ нельзя инициализировать статические переменные прямо в классе?...
Отправлено: navrocky от Апрель 30, 2013, 09:47
Спасибо за совет  :D

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


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

Вообще откуда такое горячее желание найти/применить нечто "особенное", "изысканное"? :) Чем проще текст - тем лучше, это показатель класса.  А "наворотить" много ума не надо


Название: Re: Почему в С++ нельзя инициализировать статические переменные прямо в классе?...
Отправлено: nono от Апрель 30, 2013, 20:28
Используй перечисления
class myclass
{
 enum {ONE = 10, TWO = 20};
}

...
    myclass::TWO;


Название: Re: Почему в С++ нельзя инициализировать статические переменные прямо в классе?...
Отправлено: m_ax от Апрель 30, 2013, 21:11
Используй перечисления
class myclass
{
 enum {ONE = 10, TWO = 20};
}

...
    myclass::TWO;

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


Название: Re: Почему в С++ нельзя инициализировать статические переменные прямо в классе?...
Отправлено: Syveren от Май 02, 2013, 09:17
Меня это тоже напрягает) Намного удобней ИМХО иметь возможность инициировать переменную там же, где объявил (как в джаве).
Может для обратной совместимости такую возможность не добавляют или по какой другой причине?


Название: Re: Почему в С++ нельзя инициализировать статические переменные прямо в классе?...
Отправлено: alex312 от Май 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/