好吧,与几个朋友做一些项目,我需要一些标准来用c ++命名。有没有人对c ++有任何良好的命名方案,这个方案经过深思熟虑而不是像10分钟那样制作。
示例,int * house应该命名为int * house_p,这样当有人读取代码时,他不需要一直滚动,想知道某个东西是指针,数组,矩阵还是其他什么......
发布您正在使用的深思熟虑的命名方案!
答案 0 :(得分:20)
示例,应该命名int * house int * house_p,这样当有人 读取代码,他不需要 滚动所有时间想知道是否 东西是指针,数组,矩阵或 无论...
但是如果它的类型发生了变化 - 你是否会查看所有代码并更改所有变量的名称。如果变量是复杂类型的实例,那该怎么办:
ComplicatedDerivativeFinancialInstrument x;
你会使用什么后缀?
你所问的是Hungarian notation - 它在C ++中的使用几乎被普遍认为是一个坏主意。
答案 1 :(得分:5)
在C ++中,在设计/重构代码时,从指针(int*
)更改为引用(int&
)是很常见的。如果您通过在变量名称上包含一个后缀来指示它是一个指针而有repeated yourself,那么您必须将其更改为其他所有地方。这似乎是毫无意义的制作工作,只会让代码更难编辑并塑造成你想要的东西。
你不应该需要那种提醒;例如,如果变量是指针,那么从使用中可以很清楚。
答案 2 :(得分:2)
我希望,下一个类似的主题可以帮到你:
How do you reconcile common C++ naming conventions with those of the libraries
答案 3 :(得分:1)
有很好的命名约定,但在变量名称中包含类型信息(一种形式称为hungarian notation)正变得越来越不受欢迎。大多数现代IDE都会通过将变量鼠标悬停在变量上来为您提供有关变量的有用信息,例如它的类型。但是,如果它对你很重要,匈牙利符号可能就是你想要的。
答案 4 :(得分:1)
正如Neil和aaronis所提到的那样,你谈论的是Hungarian Notation的一种形式。由于C ++是一种强类型语言,因此通常被认为是一个坏主意。它使得阅读代码变得更加困难,因为有许多额外的字符会妨碍它。
原来的匈牙利符号实际上用于表示信息的信息超出所说的类型。例如,假设我正在做一些图形工作,并且我在各种坐标系中都有分数。它们都是Point类型,但有些是对象坐标,有些是相机坐标,有些是世界坐标。在这种情况下,将它们各自的变量命名为oPt,cPt和wPt是很有意义的。
从历史上看,这个“应用程序”匈牙利语对某些人来说似乎是一个好主意(用于表示非类型信息的额外字符代码),并且它们太过于把它变成“系统”匈牙利语(额外的字符代码表示C ++) (),这些日子不赞成。
答案 5 :(得分:1)
答案 6 :(得分:0)
作为一般规则,使用您尝试解决的现实世界问题的语言。当您使用对外界有意义的好的描述性标识符时,您的代码将自行记录。
至于语法,选择一个可读的约定,传达有关标识符的一些信息,但不会将您锁定到某些实现中。简单易记,因此您的编码人员可以花更多的时间进行编码,而花费更少的时间来遵守复杂的语法要求。我发现以下内容非常简单,并且信息足够:
我担心它可能没有通过10分钟的测试,但如果需要超过10分钟来解释,它可能会妨碍实际工作。
class FooProblem {
int fooData_;
public:
FooProblem(int fooData): fooData_(fooData){}
};
答案 7 :(得分:0)
如果Facebook上有“我讨厌匈牙利记谱法”小组,我会加入它。
这是一些说明我标准的psudocode。
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;
}