#c #class #static-members
#c #класс #статические члены
Вопрос:
Насколько я понимаю, каждый экземпляр класса имеет свои собственные переменные-члены в памяти, так что он может хранить разные значения для разных объектов. Однако это не то же самое для функций-членов. Функции-члены повторно используются в объектах класса, поэтому у него есть только один адрес с одним блоком памяти, на который можно ссылаться, когда это необходимо для всех объектов.
Статическая функция предназначена для доступа к статическим членам. Однако статическая функция также существует только одна в течение срока службы ее приложения. Помимо того, что он является статическим средством доступа, на низком уровне он не отличается от обычных функций класса, не так ли? Или, может быть, я ошибаюсь, что каждый класс имеет свои собственные функции?
Ответ №1:
Нестатические функции принимают дополнительный параметр, this
, который является указателем на экземпляр класса с переменными, специфичными для экземпляра.
Статические функции не имеют этого параметра (таким образом, вы не можете использовать this
в статической функции и можете обращаться только к статическим элементам данных).
Ответ №2:
Это отличается от языка к языку, но в C или C 03 функции обычно сопоставляются с функциями сборки; то есть они существуют один раз в памяти (будь то свободные функции, функции класса или статические функции класса) и принимают аргументы в качестве параметров, включая неявный this
указатель на функции-члены.
В C 11 лямбда-функции вводят новшество: каждый экземпляр так называемой функции будет содержать некоторое состояние. Следовательно, с точки зрения реализации это означает, что необходимо создать «обычную» функцию, и она связана с анонимным пакетом данных (при необходимости). Не обязательно дублировать функцию при каждом создании лямбда-выражения, но данные дублируются. Полезно помнить, что лямбды (в C ) заменяют объекты функций (или объекты предикатов): это просто синтаксический сахар, реализация аналогична.
Ответ №3:
Единственное различие между статическими функциями и функциями-членами заключается в том, что функции-члены всегда this
автоматически передают указатель.
Ответ №4:
просто, если на него ссылаются, статические функции создают для себя единый набор памяти и предназначены для статических элементов данных, которые обычно не изменяются. Но нестатические функции создают отдельный набор памяти для каждого экземпляра и предназначены как для нестатических, так и для статических элементов данных. Если вам требуется стабильный вывод, перейдите к статическому, а если вам требуется альтернативный вариант, перейдите к нестатическому.