Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
pEntity
13 / 8 / 1
Регистрация: 12.12.2012
Сообщений: 442
#1

Назначение static ? - C++

09.03.2013, 15:59. Просмотров 996. Ответов 20
Метки нет (Все метки)

Здравствуйте. Я уже прочитал в двух книгах про статик,читал в википедии,но так и не понимаю для чего он ? Кучи больших текстов и объяснений для чего он,я так и не пойму конкретно,когда мне его нужно использовать.


Вы бы не могли максимально просто и понятно объяснить?) Неплохо было бы с простыми примерами. То есть когда для переменных использовать,когда для функций.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2013, 15:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Назначение static ? (C++):

Объяснить назначение ключевого слова static - C++
Здравствуйте! Я пытаюсь разобраться с использованием static`a и у меня такой вопрос: будет ли корректно работать программа...

Static - C++
zagolovok.hpp static int a; основной модуль #include <iostream> #include "zagolovok.hpp" int main

Private: static - C++
В хедере есть клас point, клас точек, которые должны иметь нумерацию. В поле private у него есть static атрибут free_id, в который...

static class - C++
Хочу создать static class, в котором будет находится static переменная, чтобы она была доступна из разных классов. helper.h static...

static const? - C++
если мне нужна константа в классе, как ее лучше объявить со static или без? разница будет только в том, что со статиком мне можно будет...

static-член - C++
Привет. Как сделать чтобы при каждом создании объекта класса, увеличивался его счетчик. вот сами классы: class Base{ public: ...

20
pEntity
13 / 8 / 1
Регистрация: 12.12.2012
Сообщений: 442
09.03.2013, 16:34  [ТС] #16
Ага,это понятно. Спасибо большое. А как еще понять,что они не будут видны из других модулей ?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
09.03.2013, 16:42 #17
Цитата Сообщение от pEntity Посмотреть сообщение
А как еще понять,что они не будут видны из других модулей ?
Посмотрите пример с функциями. В модуле main.cpp вызываются две функции из модуля 1.cpp. Функция print является внешней(external) и видна. А функция foo объявлена как static, и возникает ошибка, т.к. её не видно вне модуля.
1
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 16:47 #18
Добавлю ещё насчёт инициализации статических переменных. Если явно неизициализировать статическую переменную, то компилятор установит её равной 0. Элементы статических массивов и структур устанавливаются равным 0 по умолчанию. Если статическая переменная объявлена внутри блока (например в теле функции), то она инициализируется один раз при запуске программы, а при последующих заходах в этот блок она уже не будет (в отличие от локальных переменных) больше инициализироваться.
1
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.03.2013, 17:11 #19
Цитата Сообщение от alsav22 Посмотреть сообщение
то она инициализируется один раз при запуске программы первом входе в блок, а при последующих заходах в этот блок она уже не будет (в отличие от локальных переменных) больше инициализироваться.
Починил.
1
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 17:45 #20
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Починил.
Тогда и у Праты почините...
1
Миниатюры
Назначение static ?  
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.03.2013, 18:26 #21
Ну как сказать, 6.7/4:
The zero-initialization of all block-scope variables with static storage duration or thread storage duration is performed before any other initialization takes place. Constant initialization of a block-scope entity with static storage duration, if applicable, is performed before its block is first entered. An implementation is permitted to perform early initialization of other block-scope variables with static or thread storage duration under the same conditions that an implementation is permitted to statically initialize a variable with static or thread storage duration in namespace scope. Otherwise such a variable is initialized the first time control passes through its declaration
...
Инициализация нулём выполняется до начала выполнения программы.

Инициализация константой — при первом входе в блок.

Разрешено, но не обязательно, инициализировать любую статическую переменную до начала выполнения программы, если 1) такая инициализация не меняет значений других переменных; 2) такая инициализация даст тот же результат, если бы была действительно выполнена при первом входе в блок.

Если какие-то сомнения, то инициализируется при проходе потока исполнения через определение переменной.


Не то, чтобы Пратт был совсем не прав, но всё же инициализация до выполнения программы не всегда выполняется.


Вот именно поэтому не рекомендуется пользоваться статическими переменными. Потому что чёрт ногу сломит в правилах их инициализации и уничтожения.
1
09.03.2013, 18:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2013, 18:26
Привет! Вот еще темы с ответами:

Static переменные - C++
Написал небольшую программу, подключил к проекту name.h файл. В нем описание переменных static int a, b; Почему их значения можно...

Static Library - C++
Привет всем! Нужно проанализировать (понять, что она делает) статичную библиотеку, собранную под Linux (.a), используя Windows. Как это...

Опять static - C++
Есть два файла. ////////////////////////////////////// //main.cpp class SomeClass { public: SomeClass(REC*...

static const - C++
объясните, пожалуйста, вот такую странную конструкцию (накопал в старой проге): после #include идет следующее: static const char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.