在C ++中命名函数,方法,指针,变量,数组等

时间:2009-04-03 13:01:20

标签: c++ naming

好吧,与几个朋友做一些项目,我需要一些标准来用c ++命名。有没有人对c ++有任何良好的命名方案,这个方案经过深思熟虑而不是像10分钟那样制作。

示例,int * house应该命名为int * house_p,这样当有人读取代码时,他不需要一直滚动,想知道某个东西是指针,数组,矩阵还是其他什么......

发布您正在使用的深思熟虑的命名方案!

8 个答案:

答案 0 :(得分:20)

  

示例,应该命名int * house   int * house_p,这样当有人   读取代码,他不需要   滚动所有时间想知道是否   东西是指针,数组,矩阵或   无论...

但是如果它的类型发生了变化 - 你是否会查看所有代码并更改所有变量的名称。如果变量是复杂类型的实例,那该怎么办:

ComplicatedDerivativeFinancialInstrument x;

你会使用什么后缀?

你所问的是Hungarian notation - 它在C ++中的使用几乎被普遍认为是一个坏主意。

答案 1 :(得分:5)

在C ++中,在设计/重构代码时,从指针(int*)更改为引用(int&)是很常见的。如果您通过在变量名称上包含一个后缀来指示它是一个指针而有repeated yourself,那么您必须将其更改为其他所有地方。这似乎是毫无意义的制作工作,只会让代码更难编辑并塑造成你想要的东西。

你不应该需要那种提醒;例如,如果变量是指针,那么从使用中可以很清楚。

答案 2 :(得分:2)

答案 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;
}