在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 ++中标识符名称的规则是:
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中找到为什么保留这些理由的理由:[...]这提供了一个命名空间,可用于编写大量幕后非外部宏和库需要正确完成其工作的功能[...]
在中,这也适用于name mangling,如example所示。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