您可以用数字开头的班级名称吗?

问题描述 投票:13回答:4

C ++中,是否可以用digit开头类名?例如,

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];
        }
}
c++ class naming
4个回答
25
投票

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

  1. 不能以数字开头
  2. 可以由字母,数字,下划线,通用字符名称组成<< [1和定义的实现字符
  3. 不能为keyword
  • C++ draft standard中涵盖此内容的部分是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 [...]
    2.12 

    关键字

    解释了所有保留为关键字的标识符最后,以下名称也被保留:

      在任何范围内包含双下划线__或以下划线后跟大写字母(例如_Apple)开头的名称,
  • 保留在全局名称空间中以下划线开头的名称(如全局名称空间中的_apple)。
  • [草稿标准]中涵盖此内容的部分为17.6.4.3.2。我们可以从Rationale for International Standard—Programming Languages—C中找到为什么保留这些理由的理由:

    [...]这提供了一个命名空间,可用于编写大量幕后非外部宏和库需要正确完成其工作的功能[...]

    C ++

    中,这也适用于name mangling,如example所示。

    脚注


      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


  • 4
    投票

    4
    投票

    1
    投票
    © www.soinside.com 2019 - 2024. All rights reserved.