Ошибки, баги, вопросы - страница 2860
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Это правильное поведение компилятора? Вроде, A::i не создана на момент вызова метода A::f(), в котором идет обращение к A::i.
Что подразумевается под словом "создана" ?
static - всего лишь способ для создания граблей скрыть глобальную переменную или функцию, ограничив видимость скопом функции или класса
Память под глобальную переменную существует всегда.
И да, для глобальных переменных очень важен порядок инициализации (в смысле, избежать доступа к переменной до её инициализации)
В приведённом примере прокатило...
В приведённом примере прокатило...
Менять в этом месте будете компилятор? Лично я бы хотел, чтобы все осталось так, как есть.
Менять в этом месте будете компилятор? Лично я бы хотел, чтобы все осталось так, как есть.
Поведение менять не планируем.
Но есть отложенная задача по обнаружению ошибок доступа к глобальным переменным (до инициализации).
Если фичу реализуем, то при компиляции приведённого кода получите предупреждение: для инициализации A::i используется функция A::f(), в которой осуществляется доступ к инициализируемой переменной A::i.
Если фичу реализуем, то при компиляции приведённого кода получите предупреждение: для инициализации A::i используется функция A::f(), в которой осуществляется доступ к инициализируемой переменной A::i.
Спасибо!
Поведение менять не планируем
Тогда это противоречит Вашей же концепции, что переменная считается объявленной с момента завершения объявления. Зачем тогда ее придумываеть вообще было? Если в одном случае так, а в другом - по другому
В хорошем языке - единые правила, а не наоборотТогда это противоречит Вашей же концепции, что переменная считается объявленной с момента завершения объявления. Зачем тогда ее придумываеть вообще было? Если в одном случае так, а в другом - по другому
В хорошем языке - единые правила, а не наоборотЯ вооще профан, но до такого (int i = i) я бы и с перепою не додумался....... 8(
Я вооще профан, но до такого (int i = i) я бы и с перепою не додумался....... 8(
А в чем принципиальное отличие от исходного примера? Уберите лишнее и получите:
Только там куча строк, а здесь - всего одна
Если там нет ошибки при компиляции, то и здесь не должно быть (и наоборот), а иначе - бардак
Тогда это противоречит Вашей же концепции, что переменная считается объявленной с момента завершения объявления. Зачем тогда ее придумываеть вообще было? Если в одном случае так, а в другом - по другому
В хорошем языке - единые правила, а не наоборотА в чем принципиальное отличие от исходного примера? Уберите лишнее и получите:
Только там куча строк, а здесь - всего одна
Если там нет ошибки при компиляции, то и здесь не должно быть (и наоборот), а иначе - бардак
Вы не правы, это не одно и то же.
Описание статической переменной в классе, является её предъобъявлением (аналогично предъобъявлению функции или класса), а вот размещение, по сути, лишь указывает компилятору, где переменная будет храниться в памяти и когда она должна быть проинициализирована