2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 C++ static
Сообщение25.11.2012, 13:58 


11/06/12
20
При инициализации переменной внутри функции с ключевым словом static, временем жизни этой переменной становится не время выполнения функции, а время выполнения всей программы(поправьте, если ошибаюсь). Отсюда вытекает несколько вопросов:
1. Если функция относится к классу, static переменная будет создана для каждого экземпляра?
2. При наследовании классом функции со static переменной будет использоваться общая переменная или одна для нового и одна для базового класса?
3. При выполнении функции в несколько потоков будет использоваться одна переменная или их количество будет равно количеству потоков?

 Профиль  
                  
 
 Re: C++ static
Сообщение25.11.2012, 15:05 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Mr Alexey в сообщении #649335 писал(а):
1. Если функция относится к классу, static переменная будет создана для каждого экземпляра?

Нет. Хоть функция и относится к классу, на весь класс есть только один "экземпляр" функции - ему просто передаётся ссылка на конкретный объект класса, который нужно обработать. Поэтому и static переменная функции-члена класса будет только одна. Если вам нужно создать по переменной на каждый экземпляр класса, придётся внести её в список членов класса.

Mr Alexey в сообщении #649335 писал(а):
2. При наследовании классом функции со static переменной будет использоваться общая переменная или одна для нового и одна для базового класса?

Одна общая, по той же логике: на базовый класс и на производный класс - есть только один "экземпляр" функции (ей передаётся ссылка на объект базового класса внутри объекта производного класса).

Mr Alexey в сообщении #649335 писал(а):
3. При выполнении функции в несколько потоков будет использоваться одна переменная или их количество будет равно количеству потоков?

Кроме того, что static переменная видна только из "своей" функции, в остальном она - обычная глобальная переменная, наравне с переменными глобальной области видимости, и static членами класса. Она будет одна, и доступ к ней потребует специальной синхронизации.

 Профиль  
                  
 
 Re: C++ static
Сообщение25.11.2012, 16:40 
Заслуженный участник


04/05/09
4582
Mr Alexey в сообщении #649335 писал(а):
При инициализации переменной внутри функции с ключевым словом static, временем жизни этой переменной становится не время выполнения функции, а время выполнения всей программы(поправьте, если ошибаюсь).
Не совсем.
Переменная создаётся при первом вызове этой функции, и живёт до конца программы.
Mr Alexey в сообщении #649335 писал(а):
3. При выполнении функции в несколько потоков будет использоваться одна переменная или их количество будет равно количеству потоков?
Переменная одна, и даже её создание приходится синхронизировать.

 Профиль  
                  
 
 Re: C++ static
Сообщение25.11.2012, 17:29 
Заслуженный участник


09/09/10
3729
Гос-споди, зачем вам static переменная внутри метода? Сделайте ее полем.

 Профиль  
                  
 
 Re: C++ static
Сообщение06.12.2012, 22:28 


27/11/10
206

(Оффтоп)

Joker_vD в сообщении #649436 писал(а):
Гос-споди, зачем вам static переменная внутри метода? Сделайте ее полем.

Например, если хотим сделать определённое число вызовов метода или хранить указатель на что-нибудь (в ленивом стиле).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group