Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатель на статическую внутреннюю переменную 
:(
    Опции темы
Lazin
Дата 4.12.2007, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Random13 @  4.12.2007,  16:45 Найти цитируемый пост)
Это понятно. Не понятно как указатель на внутреннюю статическую переменную, ну или пусть на глобальную статическую поможет проблему очередности решить ? 

никак
он помогает решить проблему создания объекта по требованию...
вообще, городить систему взаимодействующих между собой глобальных объектов - это плохое проектирование.
PM MAIL Skype GTalk   Вверх
Random13
Дата 4.12.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



Цитата(Earnest @ 4.12.2007,  16:49)
По стандарту, статическая переменная внутри функции инициализируется при первом вызове этой функции. Т.е. если ты вызовешь эту функцию из конструктора другой глобальной переменной, то гарантированно наша статическая переменная будет уже готова к использованию.

А нельзя в этой самой функции инициализировать А, а следом за ним В ?
Пусть не инициализировать, но присвоить им нужные значения ?
PM MAIL   Вверх
Fazil6
Дата 4.12.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(Random13 @  4.12.2007,  16:45 Найти цитируемый пост)
Это понятно. Не понятно как указатель на внутреннюю статическую переменную, ну или пусть на глобальную статическую поможет проблему очередности решить ?

если бы тебе была понятна суть проблемы очередности создания, то было бы понятно как данный вариант эту проблему решает
Код

// first.h

extern int x; // глобальная 

int getX();

// first.cpp

int x = 0;

int getX()
{
     static int X = 0;
    
     return X;
}

//second.cpp
#include "first.h"

int y = x; // нет гарантии, что при инициализации y переменная x уже создана

int z = getX(); // при вызове переменная будет создана и гарантия есть

PM MAIL   Вверх
Random13
Дата 4.12.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 21.11.2007

Репутация: нет
Всего: нет



Цитата(Fazil6 @ 4.12.2007,  16:54)
Цитата(Random13 @  4.12.2007,  16:45 Найти цитируемый пост)
Это понятно. Не понятно как указатель на внутреннюю статическую переменную, ну или пусть на глобальную статическую поможет проблему очередности решить ?

если бы тебе была понятна суть проблемы очередности создания, то было бы понятно как данный вариант эту проблему решает
Код

// first.h

extern int x; // глобальная 

int getX();

// first.cpp

int x = 0;

int getX()
{
     static int X = 0;
    
     return X;
}

//second.cpp
#include "first.h"

int y = x; // нет гарантии, что при инициализации y переменная x уже создана

int z = getX(); // при вызове переменная будет создана и гарантия есть

А если написать

int getX()
{
   
     return х;
}

у = getX();



Это не принудит построить х до у?

Добавлено через 1 минуту и 32 секунды
Нет, наверное вы правы не принудит по идее. Спасибо.
Хороший тут форум живой - где вы раньше были  smile

Добавлено через 6 минут и 31 секунду
Хотя в данном примере не передается указатель на статическую переменную - передается временная копия статической переменной  smile 
PM MAIL   Вверх
Fazil6
Дата 4.12.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(Random13 @  4.12.2007,  16:59 Найти цитируемый пост)
Хотя в данном примере не передается указатель на статическую переменную - передается временная копия статической переменной

какая разница? Поменяй на ссылку или указатель... Принципиально в подходе ничего не изменится. 

PM MAIL   Вверх
baldina
Дата 5.12.2007, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Ключевое слово static имеет различную семантику.
Для глобальных переменных означает ограничение области видимости единицей компиляции (т.е. cpp файлом). Считается устаревающим, рекомендуется для этого использовать неименованный namespace.

Для переменных - членов класса означает, что переменная не дублируется в каждом объекте, а существует в единственном экземпляре.

Собственно, все. По поводу правильности, законности и переносимости все уже ранее разъяснили.
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0735 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.