![]() |
|
Модераторы: bsa |
![]()
|
|
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Внутри класса не получается инициализировать константу значением функции.
Если же вынести определение константы вне класса - то проблем нет.
Получается, что определение констант внутри класса является всего-лишь более ограниченной формой определения вне класса?
(т.е. внутри класса я должен константное выражение передать, а при инициализации вне класса - что угодно). |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
zim22
А вопрос в чем? |
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
уточню вопрос: допустим у нас есть такой код:
Почему ошибка? ведь с - константа. |
||||
|
|||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Тут ошибка потому, что
это не тот случай. Это сообщение отредактировал(а) azesmcar - 11.8.2009, 16:58 |
||||
|
|||||
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
я нарушил стандарт, да? *** нет. я его не нарушил. всё это:
относилось к такому случаю:
Это сообщение отредактировал(а) zim22 - 11.8.2009, 17:04 |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Ну, раз не компилируется Если инициализировать "на месте", это компайл-тайм константа, ею можно специализировать шаблоны, создавать массивы, а как вы предполагаете инициализировать константу рантайм и использовать ее в compile-time (создавать массив)? Добавлено через 1 минуту и 54 секунды Да, и там описано что только в этом случае
Это сообщение отредактировал(а) azesmcar - 11.8.2009, 17:05 |
|||
|
||||
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
инициализировать константу рантайм получилось:
а вот в компайл тайм использовать не получится... |
||||
|
|||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
инициализировать можно, но...тут ведь дело не в инициализации а в использовании
вот это ведь не будет работать? Что нужно чтобы это заработало?
теперь i - константа времени компиляции, все работает. Откуда во время компиляции, компилятор узнает о значении, которое будет ясно лишь на этапе выполнения. Т.е. как вы предполагаете использовать эту константу? zim22 кажется понял. Вы забываете про то, что в C++ два вида констант Константа времени выполнения и константа времени компиляции. Добавлено не так понял прочитал как не получАется Это сообщение отредактировал(а) azesmcar - 11.8.2009, 17:16 |
||||
|
|||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
я ещё не придумал но преимущества есть. это ведь Константа! и изменять её значение мы не можем, после того, как она будет инициализирована. Например такой код позволит нам самим устанавливать значение константы! а не зашивать её в программу.
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Вам поможет constexpr из грядущего стандарта, которая позволит явно разделить константы на два лагеря : readonly и constexpr.
http://en.wikipedia.org/wiki/C%2B%2B0x#Gen...ant_expressions Это сообщение отредактировал(а) mes - 11.8.2009, 18:09 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |