2014 dxdy logo

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

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




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

 
 
 
 Re: C++ static
Сообщение25.11.2012, 15:05 
Аватара пользователя
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 
Mr Alexey в сообщении #649335 писал(а):
При инициализации переменной внутри функции с ключевым словом static, временем жизни этой переменной становится не время выполнения функции, а время выполнения всей программы(поправьте, если ошибаюсь).
Не совсем.
Переменная создаётся при первом вызове этой функции, и живёт до конца программы.
Mr Alexey в сообщении #649335 писал(а):
3. При выполнении функции в несколько потоков будет использоваться одна переменная или их количество будет равно количеству потоков?
Переменная одна, и даже её создание приходится синхронизировать.

 
 
 
 Re: C++ static
Сообщение25.11.2012, 17:29 
Гос-споди, зачем вам static переменная внутри метода? Сделайте ее полем.

 
 
 
 Re: C++ static
Сообщение06.12.2012, 22:28 

(Оффтоп)

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

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

 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group