![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Random13 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Такой вопрос.
Видел как один чел использовал в программе указатель на статическую переменную из функции. То есть есть просто функция (не метод) в одном из файлов проекта. Он из нее возвращает указатель на внутреннюю статическую переменную. Я у себя проверил - работает. Функцию имплементировал в одном из файлов проекта, в другом в мэйн ее использовал. В связи с этим вопрос - не понятно. Есть ли это в ANSI С, то есть работает ли во всех компиляторах ? То есть по своему назначению внутренняя статическая переменная служит для нужд функции, но никак не для работы наруже. Вообще есть правило, что область видимости статической переменной ограничивается файлом, где она объявлена. Получается, что передавая на нее поинтер это правило можно обойти, и вообще сливается грань между внутренней и глобальной статической переменной. Я пришел к мнению, что использовать такое, наверное, можно, но не корректно... Кто что думает - интрересно почитать. |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
я использую, там где считаю необходимым, ничего незаконного не вижу в этом,
пример:
|
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Так часто реализуют шаблон проектирования "синглтон"
|
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
Fazil6 |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
это служит намного более удобным заменителем глобальной переменной
наруже она нужна, но сделано так, что полностью контролируется доступ к ней, а не бесконстрольное считывание/запись в случае просто глобальной переменной |
||||
|
|||||
Random13 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
В этом варианте все в порядке - там возвращается статическая переменная класса, а не внутренняя переменная метода.
Нигде в литературе не видел, чтобы возвращалась внутренняя статическая. |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
Random13 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
В твоем
Добавлено @ 14:19
Это сообщение отредактировал(а) Random13 - 4.12.2007, 14:20 |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
ну вот увидел. |
|||
|
||||
Random13 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
Если я увидел, что кто-то, что то делает - то не значит, что это правильно и корректно и везде будет работать.
В литературе по этому поводу ничего не читал никогда. |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Возврат ссылки или указателя на статическую переменную, объявленную внутри функции совершенно корректен. На конкретный пункт стандарта сослаться не могу, но и в литературе ссылки встречаются. Например, у Майерса или у Саттера. Или описание реализации синглетона из книги банды четырех. Более того, это шикарный прием для обхода проблемы "инициализации вовремя": как известно, порядок инициализации нормальных (внешних) глобальных или статических переменных из разных единиц компиляции неопределен. И легального способа добиться, чтобы переменная A была инициализирована гарантированно раньше переменной B не существует - если они в разных модулях. Т.е. мы получим проблему, если инициализация A зависит от B. А если вместо глобальной переменной мы используем ссылку на статическую переменную внутри функции, то она гарантированно будет инициализирована ровно в момент первого вызова - т.е. когда нам надо. И это стандарт гарантирует. -------------------- ... |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
Random13 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.11.2007 Репутация: нет Всего: нет |
А я скажу, что - это некорректно.
Мало кто чего говорит. Ну недоверчивый я такой, когда дело идет о таких вещах. Мне бы почитать где об этом. На душе бы полегчало. ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Random13, тебе сказали, где читать.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |