但你使用哪种前缀呢?
在我参与的项目中,有的使用m_作为前缀,有的只使用下划线(个人不太喜欢,因为仅使用下划线并不能明确展示该变量是成员变量)。
另一个项目中,我们使用了长的前缀形式,其中还包括了变量类型。例如,mul_ 是 unsigned long 类型的member 变量的前缀。
现在告诉我你使用的是哪种前缀(请说明原因)。
编辑:大多数人似乎在编写代码时没有使用特殊前缀来表示成员变量!这取决于语言吗?根据我的经验,C++ 代码往往会使用下划线或 m_ 作为成员变量的前缀。其他语言呢?
没有。我曾经使用下划线,但在一个项目中被其他人劝阻,也没有想念它。一个好的IDE或者良好的记忆可以告诉你什么是成员变量,什么不是。我们项目中有一个开发人员坚持在每个成员变量前加上“this.”,当我们处理名义上属于他的代码区域时,我们会迎合他。
仅使用下划线。
在我的情况下,我之所以使用它,是因为我的工作场所的编码标准文件中这样规定。然而,我无法理解在变量名称开头添加m_或某些可怕的匈牙利命名法的意义。极简风格的“仅使用下划线”使其更易读。
保持一致性比任何事情都更重要,因此选择您和您的团队成员都可以同意并坚持不懈的东西。如果您编码所使用的语言有约定,请尝试遵守它。没有什么比遵循前缀规则不一致的代码库更令人困惑的了。
对于c ++而言,除了_有时会给编译器关键字加前缀的事实之外,还有一个理由可以优先选择m_,即m代表成员变量。这也为您提供了将局部变量与其他类型的变量(s_表示静态变量,g_表示全局变量,但千万不要使用全局变量)区分开来的能力。
至于那些说IDE总是会照顾你的评论,IDE真的是你查看代码的唯一方式吗?您的差异工具是否具有与IDE相同水平的语法突出显示质量?您的源代码版本控制工具呢?您甚至从未在命令行中查看过源文件吗?现代IDE是非常高效的工具,但不管在哪种情境下阅读代码,代码都应该易于阅读。
this
关键字。这意味着使用this.data
或this->data
而不是某些依赖于社区的命名。this.
会弹出智能提示this.
符号不容易搜索,并且它不允许变量类型跟随?虽然 m_intCustomerID
让我感到不舒服。 - bornfromanegg这取决于我使用的框架!如果我在编写MFC代码,则使用m_和匈牙利标记。对于其他东西(通常是STL / Boost),我会为所有成员变量添加下划线后缀,而不必使用匈牙利标记。
MFC类
class CFoo
{
private:
int m_nAge;
CString m_strAddress;
public:
int GetAge() const { return m_nAge; }
void SetAge(int n) { m_nAge = n; }
CString GetAddress() const { return m_strAddress;
void SetAddress(LPCTSTR lpsz) { m_strAddress = lpsz; }
};
STL类
class foo
{
private:
int age_;
std::string address_;
public:
int age() const { return age_; }
void age(int a) { age_ = a; }
std::string address() const { return address_; }
void address(const std::string& str) { address_ = str; }
};
我用“m”作为成员变量前缀,用“p”作为函数参数前缀。因此代码将如下所示:
class SomeClass {
private int mCount;
...
private void SomeFunction(string pVarName) {...}
}
我发现这个方法可以快速告诉你任何变量的基本范围——如果没有前缀,那么它是局部变量。此外,当阅读一个函数时,您不需要考虑传递了什么和什么只是局部变量。