| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Инициализация костанты в классе |
| Автор: Royan 8.10.2004, 13:08 | ||
Судя по теперешнему хелпу (MSDN'у) в VC++.NET я могу написать следующее:
Придя в институт, где стоит VC++6 обнаружилось, что этакого делать нельзя. Т.е. константы надо инициализировать классическим способом А() : k(1){}, при этом "k" не должно быть статическим членом. Собственно, а как правильно с точки зрения стандарта. И выходит что это баг в VC++6? |
| Автор: Step 8.10.2004, 13:11 |
| действительно есть такая проблемка..... и я желаю получить на нее ответ |
| Автор: DENNN 8.10.2004, 13:17 | ||
| Стандарт на эту тему я не знаю, но, судя по многочисленной литературе с примерами кода, класический подход
где k1, k2 - члены класса, для которых не определен конструктор по умолчанию value1, value2 - параметры или иные данные верен, а значит должен быть и верен частный случай, где в членах класса есть переменная константа встроенного типа. |
| Автор: Vyacheslav 8.10.2004, 13:17 | ||
По стандарту объявление статических полей в классе является всего лишь ее декларированием и только. Необходимо выполнить еще и "реализацию", то ее нужно еще и определить
В последнем случае k будет инициализирован нулем |
| Автор: Vyacheslav 8.10.2004, 14:39 |
| Хотя виноват. Действительно в стандарте только для статических констант( на статические члены-неконстанты это не распространяется) разрешена инициаализация в классе. VC++6 в данном случае нарушает стандарт. С++Builder 6 эту возможность поддерживает |
| Автор: srd 8.10.2004, 15:03 |
| Вроде инициализация статических членов-констант в классе разрешена только для интегральных типов. |
| Автор: Улисс 8.10.2004, 21:25 |
| А я всю жизнь пользуюсь вариантом таким: class A { enum { k=10 }; }; работает пока везде... |