c – 你可以用数字数字开始一个类名吗?

前端之家收集整理的这篇文章主要介绍了c – 你可以用数字数字开始一个类名吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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];
        }
}

解决方法

C中的标识符名称规则如下:

>它不能从数字开始
>可以由字母,数字,下划线,通用字符名称1和实现定义的字符组成
>不能是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说:

[…]This gives a name space for writing the numerous behind-the-scenes non-external macros and functions a library needs to do its job properly[…]

在C这也适用于name mangling这个example显示.

脚注

>允许通用字符

允许的通用字符见附件E.1:

E.1 Ranges of characters allowed [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

原文链接:https://www.f2er.com/c/115678.html

猜你在找的C&C++相关文章