命名习惯(Naming Conventions)
我尝试挑选有意义的名称用于objects, classes, functions, templates等等身上,但某些隐藏于名称背后的意义可能不是那么显而易见,例如我最喜爱的两个参数名称lhs和rhs。它们分别代表 "left-hand side"(左手端)和 "right-hand side"(右手端)。我常常以它们作为二元操作符(binary operators)函数如operator== 和operator* 的参数名称。举个例子,如果a和b表示两个有理数对象,而如果Rational对象可被一个non-member operator* 函数执行乘法(如条款24所言),那么下面表达式:
- a * b
等价于以下的函数调用:
- operator*(a, b)
在条款24中我声明此一operator* 如下:
- const Rational operator* (const Rational& lhs, const Rational& rhs);
如你所见,左操作数a变成函数内的lhs,右操作数b则变成rhs。
对于成员函数,左侧实参由this指针表现出来,所以有时我单独使用参数名称rhs。你可能已经在第5页的若干Widget成员函数声明中注意到了这一点。对了,我经常以Widget class示例,"Widget" 并不代表任何东西,它只是当我需要一个示范用的class名称时偶尔采用的名称,它和GUI toolkits的widgets完全无关。
我常将"指向一个T型对象"的指针命名为pt,意思是 "pointer to T"。下面是一些例子:
- Widget* pw; //pw = "ptr to Widget".
-
- class Airplane;
- Airplane* pa; //pa = "ptr to Airplane".
-
- class GameCharacter;
- GameCharacter* pgc; //pgc = "ptr to GameCharacter"
对于references我使用类似习惯:rw可能是个reference to Widget,ra则是个reference to Airplane。
当我讨论成员函数时,偶尔会以mf为名。