Что означает префикс переменной ` m'?

Я часто вижу m_ префикс, используемый для переменных (m_World,m_Sprites,...) в учебниках, примерах и другом коде, в основном связанных с разработкой игр.

Почему люди добавляют префикс m_ переменные?

7 ответов


Это типичная практика программирования для определения переменных, переменных-членов. Поэтому, когда вы используете их позже,вам не нужно видеть, где они определены, чтобы знать их область. Это также здорово, если вы уже знаете область, и вы используете что-то вроде intelliSense, вы можете начать с m_ и отображается список всех переменных-членов. Часть венгерской нотации, см. Часть О области в вот примеры:.


на Чистый код: руководство по гибкому мастерству программного обеспечения существует явная рекомендация об использовании этого префикса:

вам также не нужно префикс переменных-членов с


на m_ префикс часто используется для переменных-членов - Я думаю, что его главное преимущество заключается в том, что он помогает создать четкое различие между публичным свойством и частной переменной-членом, поддерживающей его:

int m_something

public int Something => this.m_something; 

Это может помочь иметь согласованное соглашение об именах для резервных переменных и m_ префикс-это один из способов сделать это - тот, который работает в регистр языках.

насколько это полезно, зависит от языков и инструментов, которые вы с помощью. Современные IDE с сильными инструментами рефакторинга и intellisense имеют меньшую потребность в таких конвенциях, и это, конечно, не единственный способ сделать это, но в любом случае стоит знать о практике.


Это обычная практика в C++. Это связано с тем, что в C++ вы не можете иметь одинаковое имя для функции-члена и переменной-члена, а функции getter часто называются без префикса "get".

class Person
{
   public:
      std::string name() const;

   private:
      std::string name; // This would lead to a compilation error.
      std::string m_name; // OK.
};

main.cpp:9:19: error: duplicate member 'name'
      std::string name;
                  ^
main.cpp:6:19: note: previous declaration is here
      std::string name() const;
                  ^
1 error generated.

http://coliru.stacked-crooked.com/a/f38e7dbb047687ad

"мы" государств "членов". Префикс " _ "также распространен.

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


как указано в других ответах,m_ префикс используется для указания того, что переменная является членом класса. Это отличается от венгерской нотации, потому что она не указывает тип переменной, а ее контекст.

Я использую m_ на C++, но не на некоторых других языках, где " это " или " я " является обязательным. Мне не нравится, когда "this ->" используется с C++, потому что он загромождает код.

другой ответ говорит m_dsc это "плохая практика" и "описание"; это " хорошо практика", но это отвлекающий маневр, потому что проблема заключается в аббревиатуре.

другой ответ говорит, вписав this всплывает IntelliSense, но любая хорошая IDE будет иметь горячую клавишу для всплывающего IntelliSense для текущих членов класса.


для завершения текущих ответов и поскольку вопрос не является языковым, некоторые C-проекты используют префикс m_ для определения глобальных переменных, специфичных для файла-и g_ для глобальных переменных, область действия которых больше, чем файл, они определены.
В этом случае глобальные переменные с префиксом m_ должно быть определено как static.

посмотреть EDK2 (реализация с открытым исходным кодом UEFI) соглашение о кодировании пример проекта используя это соглашение.


Как указано во многих других ответах, мы-это префикс, который обозначает переменные-члены. Он / обычно используется в мире C++ и распространяется на другие языки, включая Java.

в современной IDE он полностью избыточен, поскольку подсветка синтаксиса делает очевидным, какие переменные местные и какие из них члены. Однако к тому времени, когда подсветка синтаксиса появилась в конце 90-х годов, конвенция существовала уже много лет и была твердо установлен (по крайней мере, в мире C++).

Я не знаю, какие учебники Вы имеете в виду, но я догадываюсь, что они используют конвенцию из-за одного из двух факторов:

  • это учебники на C++, написанные людьми, привыкшими к соглашению m_, и / или...
  • они пишут код в обычном (моноширинном) тексте, без подсветки синтаксиса, поэтому соглашение m_ полезно, чтобы сделать примеры более ясными.