好吧,和几个朋友一起做一些项目,我需要一些标准来命名 C++ 中的东西。有没有人有任何好的 c++ 命名方案,它是经过深思熟虑的,而不是像 10 分钟那样制作的。
例如,int* house 应该命名为 int* house_p,这样当有人阅读代码时,他就不需要一直滚动想知道一个东西是指针、数组、矩阵还是其他什么...
发布您正在使用的经过深思熟虑的命名方案!
例如,int* house 应该命名为 int* house_p,这样当有人阅读代码时,他就不需要一直滚动想知道一个东西是指针、数组、矩阵还是其他什么...
但是如果它的类型发生了变化——你是否要检查所有的代码并更改所有变量的名称。如果变量是复杂类型的实例怎么办:
ComplicatedDerivativeFinancialInstrument x;
你会使用什么后缀?
您所问的是匈牙利符号- 它在 C++ 中的使用几乎被普遍认为是一个坏主意。
int*
在 C++ 中,在设计/重构代码时,将指针 ( ) 更改为引用 ( )是很常见的int&
。如果您通过在变量名上包含一个表明它是指针的后缀来重复自己,那么您将不得不将其更改为其他内容,到处都是。这似乎是无意义的工作,只会让代码更难编辑和塑造成你想要的样子。
你不应该需要那种提醒;例如,如果变量是指针,从用法上会很清楚。
那里有很好的命名约定,但是在变量名称中包含类型信息(一种形式称为匈牙利表示法)变得不那么流行了。大多数现代 IDE 只需将鼠标悬停在变量上即可为您提供有关变量的有用信息,例如它的类型。但是,如果它对您很重要,那么匈牙利符号可能就是您想要的。
正如 Neil 和 aaronis 所提到的,您说的是一种Hungarian Notation形式。由于 C++ 是一种强类型语言,因此通常被认为是一个坏主意。它使代码更难阅读,因为有一堆额外的字符妨碍了。
最初的匈牙利符号实际上用于表示超出类型所告诉的信息。例如,假设我正在做一些图形工作,并且我在各种坐标系中都有点。它们都是 Point 类型,但有些在对象坐标中,有些在相机坐标中,有些在世界坐标中。在这种情况下,将它们各自的变量命名为 oPt、cPt 和 wPt 是很有意义的。
从历史上看,这个“应用程序”匈牙利语对某些人来说似乎是一个好主意(额外的字符代码表示非类型信息),他们走得太远了,将其变成了“系统”匈牙利语(额外的字符代码表示 C++ 类型),这几天不受欢迎。
作为一般规则,请使用您要解决的实际问题的语言。当您使用对外界有意义的良好、描述性标识符时,您的代码将记录自己。
至于语法,选择一个可读的约定,传达一些关于标识符的信息,但不会将你锁定在某些实现中。使其简单易记,这样您的编码人员就可以花更多的时间进行编码,而花更少的时间来满足复杂的语法要求。我发现以下内容很容易理解并且足够丰富:
恐怕它可能没有通过 10 分钟的测试,但如果需要超过 10 分钟的时间来解释,它可能会妨碍实际工作。
class FooProblem {
int fooData_;
public:
FooProblem(int fooData): fooData_(fooData){}
};
如果 Facebook 上有一个“我讨厌匈牙利符号”组,我会加入。
这是一些说明我的标准的伪代码。
namespace utilities
{
class MyGizmo
{
public :
void doTheThing();
std::string name_;
private:
int thingCount_;
};
static const char* ApplicationName = "Gizmotronic Ultra 1.0";
void setGizmoName(MyGizmo& gizmo, const std::string & name)
{
gizmo.name_ = name;
}
int main()
{
cout << ApplicationName;
MyGizmo gizmo;
gizmo.doTheThing();
std::string gizmoName = gizmo.name_;
return 0;
}