名字

  一个名字(标识符)由一系列字母和数字构成,其中的第一个字符必须是字母。下划线字符也作为字母看待。C++对一个名字里字符的个数并未强加任何限制。然后,一个具体实现中的某些部分可能不受写编辑器的人们控制(特别是连接器),而这部分有可能强加某些限制,这当然非常不幸。有些运行环境还对标识符中可以接受的字符做了某些扩充或者限制。扩充(例如,允许在名字中使用$)将产生不可移植的程序。C++的关键字(附录A),例如,new和int,不能用做用户定义实体的名字。名字的例子如下所示:

    hello        this_is_a_most_unusually_long_name
    DEFINED      foO      bAr     u_name      HorseSense
    var0         var1     CLASS   _class      ___

不能作为标识符的字符序列的例子如:

    012          a fool     $sys      class      3var
    pay.due      foo~bar    .name     if

以下划线符开头的名字是保留给实现或者运行环境,用于特殊的目的,在应用程序里不要采用这样的名字。

  编译器在读程序时,总是设法去寻找最长的能够做成一个名字的字符序列。这样,var10就是一个名字,而不是名字var后面跟着数10。还有,elseif是一个名字,而不是关键字else后跟关键字if。

  大写和小写字母是区分的,所以Count和count是不同的名字,选择那些只是在大小写上有差异的名字可不是一种聪明饿做法。一般来说,最好能避免那些仅以某些微细的方式区分的不同的名字。举例来说,大写的o(O)和零(0)很难分辨,小写的L(l)和一(1)也是这样。因此,用lO、l0、l1、ll作为标识符名字是很糟糕的选择。

  用于较大的作用域的名字应该是相对较长的更加明确的名字,例如vector、Window_with_border和Department_number。然而,如果在很小的作用域里只使用那些短小而熟悉的名字,如x、i和p,代码会显得更清晰些。类(第10章)和名字空间(8.2节)可用来保持较小的作用域。让那些频繁使用的名字相对比较短,将较长的名字留给不常用的实体,这种做法也很有价值。名字的选择应该反映一个实体的意义,而补水它的实现。例如,phone_book就比number_list好,即使这些电话号码实际存放在一个list(3.7节)里。选择好的名字也是一种艺术。

  应设法保持一种统一的命名风格。例如,对非标准库的用户定义类型都用大写,非类型的开头用小写字母(例如,Shape和current_token)。还有,对宏用全部大写的名字(如果你真的要使用宏的话;例如,HACK),并用下划线分隔名字中的单词。当然,统一用法是很难做到的,因为程序常常由一些片段组成,它们有不同的来源,采用的是不同的也都合理的风格。你自己对缩写和首字母缩写应该保持某种一致性。

🔚