在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++中标识符名称的规则是:
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 关键字解释了保留用作关键字的所有标识符.
最后,还保留以下名称:
__,或_Apple以任何范围中的下划线后跟大写字母(如)开头的名称,_apple保留在全局命名空间中以下划线开头的名称(如在全局命名空间中).标准草案中涉及此部分的部分是17.6.4.3.2.我们可以找到一个理由来解释为什么这些被保留在国际标准编程语言的基本原理-C中,它说:
[...]这给了一个名称空间,用于编写库中需要正常工作的众多幕后非外部宏和函数[...]
脚注
允许的通用字符包含在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