| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Определение члена-константы внутри/снаружи класса |
| Автор: zim22 11.8.2009, 16:38 | ||||||
Внутри класса не получается инициализировать константу значением функции.
Если же вынести определение константы вне класса - то проблем нет.
Получается, что определение констант внутри класса является всего-лишь более ограниченной формой определения вне класса?
(т.е. внутри класса я должен константное выражение передать, а при инициализации вне класса - что угодно). |
| Автор: azesmcar 11.8.2009, 16:42 |
| zim22 А вопрос в чем? |
| Автор: azesmcar 11.8.2009, 16:52 | ||||
Тут ошибка потому, что
это не тот случай. |
| Автор: zim22 11.8.2009, 17:00 | ||||||
я нарушил стандарт, да? *** нет. я его не нарушил. всё это:
относилось к такому случаю:
|
| Автор: azesmcar 11.8.2009, 17:04 | ||
Ну, раз не компилируется Если инициализировать "на месте", это компайл-тайм константа, ею можно специализировать шаблоны, создавать массивы, а как вы предполагаете инициализировать константу рантайм и использовать ее в compile-time (создавать массив)? Добавлено через 1 минуту и 54 секунды Да, и там описано что только в этом случае
|
| Автор: zim22 11.8.2009, 17:07 | ||||
инициализировать константу рантайм получилось:
а вот в компайл тайм использовать не получится... |
| Автор: azesmcar 11.8.2009, 17:09 | ||||
инициализировать можно, но...тут ведь дело не в инициализации а в использовании
вот это ведь не будет работать? Что нужно чтобы это заработало?
теперь i - константа времени компиляции, все работает. Откуда во время компиляции, компилятор узнает о значении, которое будет ясно лишь на этапе выполнения. Т.е. как вы предполагаете использовать эту константу? zim22 кажется понял. Вы забываете про то, что в C++ два вида констант Константа времени выполнения и константа времени компиляции. Добавлено не так понял прочитал как не получАется |
| Автор: zim22 11.8.2009, 17:16 | ||
я ещё не придумал но преимущества есть. это ведь Константа! и изменять её значение мы не можем, после того, как она будет инициализирована. Например такой код позволит нам самим устанавливать значение константы! а не зашивать её в программу.
|
| Автор: azesmcar 11.8.2009, 17:18 | ||
Я имел ввиду на этапе компиляции, а так, думаю применение найдется |
| Автор: mes 11.8.2009, 17:40 |
| Вам поможет constexpr из грядущего стандарта, которая позволит явно разделить константы на два лагеря : readonly и constexpr. http://en.wikipedia.org/wiki/C%2B%2B0x#Generalized_constant_expressions |
| Автор: zim22 11.8.2009, 17:46 |
супер! |