你能用数字开始一个班级名字吗?

Cin*_*lia 13 c++ naming class

C++中,是否可以用数字启动类名?例如,

template <class T> class 2DArray {

public:
    // 1D ARRAY CLASS
    class 1DArray {
    public:
        1DArray() { Create(); }
        1DArray(iterator arr) : array1d_(arr) { }
        explicit 1DArray(size_type cols, const T& t = T()) { Create(cols, t); }
        1DArray(const 1DArray& arr) { Create(arr.begin(), arr.end()); }
        1DArray& operator=(const 2DArray&);
        ~1DArray() { Uncreate(); }

        T& operator[](size_type n) {
            return array1d_[n];
        }
        const T& operator[](size_type n) const {
            return array1d_[n];
        }
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*our 25

C++中标识符名称的规则是:

  1. 它不能以数字开头
  2. 可以由字母,数字,下划线,通用字符名称1实现定义的字符组成
  3. 不能是关键字.

C++草案标准中涵盖此部分的部分是包含以下语法的2.11 标识符:

identifier:
  identifier-nondigit            <- Can only start with a non-digit
  identifier identifier-nondigit <- Next two rules allows for subsequent 
  identifier digit               <-  characters to be those outlined in 2 above
identifier-nondigit:
  nondigit                       <- a-z, A-Z and _ 
  universal-character-name
  other implementation-defined characters
[...]
Run Code Online (Sandbox Code Playgroud)

2.12 关键字解释了保留用作关键字的所有标识符.

最后,还保留以下名称:

  1. 包含双下划线的名称__,或_Apple以任何范围中的下划线后跟大写字母(如)开头的名称,
  2. _apple保留在全局命名空间中以下划线开头的名称(如在全局命名空间中).

标准草案中涉及此部分的部分是17.6.4.3.2.我们可以找到一个理由来解释为什么这些被保留在国际标准编程语言的基本原理-C中,它说:

[...]这给了一个名称空间,用于编写库中需要正常工作的众多幕后非外部宏和函数[...]

C++中,这也适用于 名称修改,如此示例所示.


脚注

  • 1.允许通用字符

允许的通用字符包含在Annex E.1:

E.1允许的字符范围[charname.allowed]

00A8,00AA,00AD,

00AF,00B2-00B5,00B7-00BA,00BC-00BE,00C0-00D6,00D8-00F6,00F8-00FF

0100-167F,1681-180D,180F-1FFF 200B-200D,202A-202E,203F-2040,2054,

2060-206F 2070-218F,2460-24FF,2776-2793,2C00-2DFF,2E80-2FFF

3004-3007,3021-302F,3031-303F

3040-D7FF F900-FD3D,FD40-FDCF,

FDF0-FE44,FE47-FFFD

10000-1FFFD,20000-2FFFD,30000-3FFFD,40000-4FFFD,50000-5FFFD,60000-6FFFD,70000-7FFFD,80000-8FFFD,90000-9FFFD,A0000-AFFFD,B0000-BFFFD,C0000-CFFFD,D0000- DFFFD,E0000-EFFFD

  • 澄清:包含双下划线或以下划线后跟大写字母开头,或以全局范围中的下划线开头. (2认同)