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