1.4d关键字与标识符的命名

关键字

C++保留了73个单词供自己使用,这些单词称为关键字,每个关键字都有特殊含义。

以下是关键字列表(C++11):

alignas **
alignof **
asm
auto
bool *
break
case
catch
char
char16_t **
char32_t **
class
const
constexpr **
const_cast *
continue
decltype
default
delete
do
double
dynamic_cast *
else
enum
explicit *
export *
extern
false *
float
for
friend
goto
if
inline
int
long
mutable *
namespace *
new
noexcept **
nullptr **
operator
private
protected

 

public
register
reinterpret_cast *
return
short
signed
sizeof
static
static_assert **
static_cast *
struct
switch
template
this
thread_local **
throw
true *
try
typedef
typeid *
typename *
union
unsigned
using *
virtual
void
volatile
wchar_t *
whil

其中带 * 的15个关键字是C++98中新增的,一些老旧的教科书可能遗漏了。带 ** 的9个关键字是C++11中新增的,如果你的编译器不支持C++11,这些关键字就不起作用。

上面的关键字有一些我们已经遇到了,比如int, void, return, using, and namespace。这些关键字和一些操作符一起定义了整个C++语言,(预处理器指令除外)。因为这些关键字都有特殊含义,所以编译器会将其显示为不同的颜色(称为高亮,通常为蓝色)以示区分。

学完本教程,你就会明白所有这些关键字的含义。

标识符的命名

C++中变量、函数、类或者对象的名字称为标识符,C++中标识符的命名具有很高的灵活性,可以完全按照自己的意愿来,但也要遵循如下的规则:

  • 标识符不能与关键字同名,关键字是保留的。
  • 标识符只能是字母(区分大小写)、数字与下划线的组合,即名称不能包含符号(下划线除外)和空格。
  • 标识符必须以字母(大写或小写)或者下划线开头,不能以数字开头。
  • C++区分大小写,例如nvalue、nValue、NVALUE是三个不同的标识符。

现在我们已经知道命名的规则了,接下来我们再来看一下如何命名变量。

第一,按照C++中的惯例,变量名应以小写字母开头,如果变量名是一个单词,那么整个单词都应当小写

int value; // 正确

int Value; // 不正确(应以小写字母开头)

int VALUE; // 不正确

int VaLuE; // 不正确(明显不美观)

一般来说,函数名也以小写字母开头(这一点有分歧)。我们这里赞成使用小写字母开头,因为标准库中的所有函数名比如main()都是以小写字母开头的,我们也遵循这个标准。

以大写字母开头的标识符通常用于结构体、类、枚举变量。

如果变量或者函数的名称由多个单词组成,有两种处理方法:使用下划线隔开或者采用驼峰命名法(例如myVariableName,除了第一个单词,后面单词第一个字母大小,看起来就像驼峰)。

int my_variable_name; // 正确,使用下划线隔开

int myVariableName; // 正确,驼峰命名法

int my variable name; // 不正确,不允许有空格

int MyVariableName; // 不正确,应以小写字母开头

本教程中,我们支持使用驼峰命名法,因为它更易于阅读(代码密集区域很容易将下划线看成空格),但下划线也是常见的,C++标准库中的变量和函数都会使用下划线。有时候两者也混合使用,变量使用下划线,函数名使用驼峰法。

值得注意的是,如果你在使用别人的代码,最好与他的代码风格相匹配,不必严格按照上面的命名规范。

第二,应该避免命名你的标识符以下划线开头,因为这些名称通常是操作系统,库,或编译器使用的

第三,这或许是最重要的规则——标识符的名称应当能够描述其功能。经验不足的程序员常会让变量名尽可能短,以节省打字时间或者是想当然认为这些名称的意义是显而易见的。这是一个明显的错误认识,理想的情况时,变量的名称能够让对你代码一无所知的人尽可能快地看懂它的功能。三个月后,当你重新审视你的代码时,你可能就会忘记它的意思,你会感谢自己当初使用了有意义的名称。代码越复杂,越需要遵循这一条。

int ccount; //     差,没人知道ccount是什么

int customerCount; //好,可以看出计算的的是什么

int i ;//通常是不好的,除非是用在无特殊意义的地方,比如循环变量

int index;//如果可以明显看出索引的内容就是好的

int totalScore;//好,有描述性

int _count;//差,毋以下划线开头

int count;//如果可以明显看出计算的是什么就是OK的

int data; //差,不知是什么类型的数据

int value1, value2;//不易区分两者

int numberOfApples;//好,具有描述性

int monstersKilled;//好,具有描述性

int x, y;//如果用在某个数学函数中就是可以的

注意:在无特殊含义的地方可以使用无意义的变量,比如用于循环计数的变量,用于数学函数的变量。

第四,一个好的注释也是十分有益的。比如我们命名了一个变量叫numberOfChars,这应该是存储字符串的字符数的,但是“Hello World!”有几个字符,这取决于是否包含空格、标点等问题,所以应当加上适当的注释,标注计算字符数时的注意事项。我们也不能将变量命名为numberOfCharsIncludingWhitespaceAndPunctuation,虽然明确,但太长了,加上一个注释不是更好?

小测验

按照上面的标准,下面哪些变量的命名是不合适的,并指出为什么?

1) int sum;
2) int _apples;
3) int VALUE;
4) int my variable name;
5) int TotalCustomers;
6) int void;
7) int numFruit;
8) int 3some;
9) int meters_of_pipe;

答案

2) 变量名不应以下划线开始
3) 应以小写字母开头
4) 变量名不可包含空格
5) 应以小写字母开头
6) void是关键字
8) 变量名不可以数字开头

第1、7、9个是合适的命名方法。

转载请参看关于博客页面相关要求。

关于 “1.4d关键字与标识符的命名” 的 1 个意见

发表评论

电子邮件地址不会被公开。