class C {
private:
int member_; // here is the underscore I refer to.
}
Run Code Online (Sandbox Code Playgroud)
Google样式指南和Geosoft的C++样式指南推荐使用此下划线.
我知道有不同的意见和口味.
我想问一下使用它或者被迫使用它的人是否认为它们对它们有益,中性或有害.为什么?
这是我的答案:
我理解它背后的动机,但它并不能说服我.我尝试了它,我得到的只是整个类的一点点混乱,但构造函数中的成员初始化更简单.我没有遇到下划线帮助私有成员变量和其他变量之间有所不同的情况(除了提到的初始化).
在这方面,我认为这种风格有害.
n1c*_*ckp 22
好吧,因为没有人提到它:向成员变量添加下划线允许您使用变量的"概念"名称命名getter和setter.
例如:
class MyClass
{
int someMember_;
public:
int someMember() const { return someMember_; }
void someMember( int newValue ) { someMember_ = newValue; }
};
Run Code Online (Sandbox Code Playgroud)
不是我用这种风格.
swe*_*egi 10
我使用"m_"作为普通成员变量的前缀,使用"s_"作为静态成员变量.因此范围是直接可见的.
sbi*_*sbi 10
如果你需要这个下划线来告诉类成员来自其他变量,你可能有太大的成员函数来立即看到什么是变量/参数.
我仍然喜欢它,因为它经常简化成员函数参数命名:
class person
{
public:
person(const std::string& first_name, const std::string& last_name)
: first_name_(first_name), last_name_(last_name) {}
// .......
private:
std::string first_name_;
std::string last_name_;
};
Run Code Online (Sandbox Code Playgroud)
我认为区分类变量和局部变量(如果确实需要的话还可以是全局变量)很重要。如何做并不重要——只要保持一致即可。
class Foo
{
int mMember;
int member_;
int _member;
int m_Member;
};
Run Code Online (Sandbox Code Playgroud)
所有样式都能为您提供所需的信息。只要你一直保持同样的风格,就没问题。有时其他人需要使用您的代码(例如,当您创建库或与社区合作时)。那么坚持使用 C++ 社区中最常用的样式可能是个好主意。
抱歉 - 我无法回答那是什么风格。
这基本上是一个宗教争论,所以你永远不会就这种风格达成共识。FWIW,出于其他人已经说明的原因,我将这种样式用于我的成员变量,例如:
class Foo
{
public:
Foo(std::string name, int age) :
name_(name),
age_(age)
{
}
std::string name() const { return name_; }
void name(const std::string& name) { name_ = name; }
int age() const { return age_; }
void age(int age) { age_ = age; }
private:
std::string name_;
int age_;
};
Run Code Online (Sandbox Code Playgroud)
只要采用你满意的东西并坚持下去即可。