Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131

Назначение static ?

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

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


Вы бы не могли максимально просто и понятно объяснить?) Неплохо было бы с простыми примерами. То есть когда для переменных использовать,когда для функций.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2013, 15:59
Ответы с готовыми решениями:

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

Чем отличается static local variable от static global variable?
привет вроде уже ребята объясняли, но что -то я не понял.... скажите пожалуйста,чем отличается static local variable от static...

Static
Как выходит 10 ?? #include <iostream> using namespace std; int f1(int k) { static int n=2; return ++n+k; } int...

20
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
09.03.2013, 16:01
Цитата Сообщение от pEntity Посмотреть сообщение
но так и не понимаю для чего он ?
Его назначение зависит от того, где он используется.
1
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
09.03.2013, 16:04  [ТС]
Я понимаю,но вы бы не могли рассказать о статике,что нужно знать,дабы его применять?
0
 Аватар для Kins
60 / 59 / 7
Регистрация: 03.02.2013
Сообщений: 167
09.03.2013, 16:05
статические переменные (static int a; ) объявляются в теле функции и остаются в памяти после окончания жизни функции, тоесть их можно исппользовать при многократном вызове функции, например для счетчика вызовов.
своими словами=)
про статические функции не слышал.
1
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
09.03.2013, 16:07  [ТС]
Я и без статика смогу использовать переменную при многократном вызове функции
0
 Аватар для Kins
60 / 59 / 7
Регистрация: 03.02.2013
Сообщений: 167
09.03.2013, 16:08
Цитата Сообщение от pEntity Посмотреть сообщение
Я и без статика смогу использовать переменную при многократном вызове функции
Это если вы ее глобальной объявите. Тоесть до объявления самой функции, в которой она будет использована.
1
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
09.03.2013, 16:10  [ТС]
Это я понял. А когда в функции пишут static void Test() {} это как понимать?
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
09.03.2013, 16:12
Цитата Сообщение от pEntity Посмотреть сообщение
Я понимаю,но вы бы не могли рассказать о статике,что нужно знать,дабы его применять?
Ограничивает область видимости глобальных переменных текущим модулем
Для функций тоже самое.
Для локальных переменных в функции - пост #4
Статические поля класса и методы.
1
 Аватар для Kins
60 / 59 / 7
Регистрация: 03.02.2013
Сообщений: 167
09.03.2013, 16:12
Цитата Сообщение от pEntity Посмотреть сообщение
static void Test() {} это как понимать?
с таким не сталкивался.
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
09.03.2013, 16:13
Цитата Сообщение от pEntity Посмотреть сообщение
А когда в функции пишут static void Test() {} это как понимать?
Это значит, что область видимости функции ограничена данным модулем.
1
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
09.03.2013, 16:23  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Это значит, что область видимости функции ограничена данным модулем.
А для чего это допустим нужно?
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
09.03.2013, 16:23
Цитата Сообщение от Croessmah Посмотреть сообщение
Ограничивает область видимости глобальных переменных текущим модулем
Кликните здесь для просмотра всего текста
Два файла:
C++
1
2
3
4
5
6
7
#include <iostream>
static int c=10;
void print1();
int main(){
    std::cout<<c<<std::endl;
    print1();
}
C++
1
2
3
4
5
#include <iostream>
static int c=5;
void print1(){
    std::cout<<c<<std::endl;
}
Название: код_1.png
Просмотров: 51

Размер: 1.8 Кб
А попробуйте без static



Цитата Сообщение от Croessmah Посмотреть сообщение
Для функций тоже самое.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
#include <iostream>
void print1();
void foo();
int main(){
    print1();
    foo();
}
C++
1
2
3
4
5
6
#include <iostream>
void print1(){
    std::cout<<"print1"<<std::endl;
}
static void foo(){
}

попробуйте без static
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 16:26
Вообще, static перед чем нибудь, говорит о том, что это что-то хранится в статическтй памяти, а значит будет существовать до конца программы. Если static стоит перед тем, что и так хранится в статической памяти (глобальные переменные, функции и т.д.), то это значит, что это что-то имеет ограниченную (в отличие от того, если бы перед ним static не стоял) область видимости (текущий модуль).
1
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
09.03.2013, 16:28
Цитата Сообщение от Croessmah Посмотреть сообщение
Для локальных переменных в функции - пост #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
int foo(){
    static int c=0;
    return c++;
}
 
int foo_NS(){
    int c=0;
    return c++;
}
 
int main(){
    std::cout<<foo()<<std::endl;
    std::cout<<foo()<<std::endl;
    std::cout<<foo()<<std::endl<<std::endl;
    std::cout<<foo_NS()<<std::endl;
    std::cout<<foo_NS()<<std::endl;
    std::cout<<foo_NS()<<std::endl;
}
Название: код_3.png
Просмотров: 51

Размер: 1.8 Кб
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
09.03.2013, 16:30
Цитата Сообщение от pEntity Посмотреть сообщение
А для чего это допустим нужно?
Например, написали мы супер-пупер библиотеку, у нас есть функции, с которыми могут работать пользователи библиотеки, а есть функции, необходимые для внутренней реализации библиотеки, делаем их static и они не видны из других модулей.
Что-то на подобии private в классе.
1
351 / 270 / 67
Регистрация: 12.12.2012
Сообщений: 2,131
09.03.2013, 16:34  [ТС]
Ага,это понятно. Спасибо большое. А как еще понять,что они не будут видны из других модулей ?
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
09.03.2013, 16:42
Цитата Сообщение от pEntity Посмотреть сообщение
А как еще понять,что они не будут видны из других модулей ?
Посмотрите пример с функциями. В модуле main.cpp вызываются две функции из модуля 1.cpp. Функция print является внешней(external) и видна. А функция foo объявлена как static, и возникает ошибка, т.к. её не видно вне модуля.
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 16:47
Добавлю ещё насчёт инициализации статических переменных. Если явно неизициализировать статическую переменную, то компилятор установит её равной 0. Элементы статических массивов и структур устанавливаются равным 0 по умолчанию. Если статическая переменная объявлена внутри блока (например в теле функции), то она инициализируется один раз при запуске программы, а при последующих заходах в этот блок она уже не будет (в отличие от локальных переменных) больше инициализироваться.
1
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
09.03.2013, 17:11
Цитата Сообщение от alsav22 Посмотреть сообщение
то она инициализируется один раз при запуске программы первом входе в блок, а при последующих заходах в этот блок она уже не будет (в отличие от локальных переменных) больше инициализироваться.
Починил.
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 17:45
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Починил.
Тогда и у Праты почините...
Миниатюры
Назначение static ?  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.03.2013, 17:45
Помогаю со студенческими работами здесь

Static
zagolovok.hpp static int a; основной модуль #include &lt;iostream&gt; #include &quot;zagolovok.hpp&quot; int main

Назначение функций
Добрый день, дана программа. #include &quot;Cipher.h&quot; #include &lt;cstdlib&gt; #include &lt;cstdio&gt; #include &lt;cmath&gt; #include...

Назначение оператора ::
Добрый день! Сейчас изучаю классы и в примерах часто сталкиваюсь с конструкциями типа void StringsWork::getStr() { cout...

Назначение комментария
:-|Назначение комментария. Как указать комментарий в программе С++?

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru