Что означает префикс переменной ` 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.
"мы" государств "членов". Префикс " _ "также распространен.
вы не должны использовать его в языках программирования, которые решают эту проблему использование различных конвенций / грамматики.
как указано в других ответах,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_ полезно, чтобы сделать примеры более ясными.