I've seen quite a lot lately, in games or other applications that class data members, or methods or other stuff have "_" in front of the name.
For example taken fro DXUT.cpp (Directx) _Acquires_lock_(g_cs)
or _Releases_lock_(g_cs)
or _tmain
. There are numerous examples like this in game programming like there (Taken from GameFromScratch Tutorial)
static GameState _gameState;
static sf::RenderWindow _mainWindow;
These are just some data members of some type.
Is there any reason behind the _ char? Is if specifically for something?
答案 0 :(得分:12)
通常,当您看到带有前导下划线的名称时,它
属于(C ++)实现,或
是由不知道第一种可能性的人选择的。
不建议在用户代码中使用带有前导下划线的名称。
任何以下划线开头的名称都保留给全局命名空间中的实现,任何以前导下划线开头后跟大写的名称都保留给任何地方的实现。
我还记得任何带有两个连续下划线的名字,都是保留的。
新手程序员可以使用前导下划线来表示“数据成员”。
对于那些了解上述内容的人来说,通常的约定是尾随下划线,和/或m
或my
等前缀。
E.g。我记得,在Boost中使用了尾随下划线,而在MFC中使用了m
或my
前缀(我记得)。
答案 1 :(得分:2)
_Acquires_lock_(g_cs)
或_Releases_lock_(g_cs)
该命名约定使用reserved names,这意味着只允许编译器实现使用它们。
确保实现可以使用永远不会与用户定义的宏或其他名称冲突的名称,因为不允许用户使用这些保留名称。
带有单个下划线后跟小写字母的名称只是表示成员变量的惯用方法,或者不属于API的私有实现详细信息。
答案 2 :(得分:-8)
通常,变量名前面的下划线(_
)表示它是您平台上C ++实现的一部分。避免在自己的代码中使用下划线开始变量。
阅读"What are the rules about using an underscore in a C++ identifier?"的答案,了解有关C ++命名约定的更多信息(尤其是下划线约定)。