Pouvez-vous commencer un nom de classe avec un chiffre?
Dans C++est-il possible de démarrer un nom de classe avec un chiffres? Par exemple,
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];
}
}
source d'informationauteur Cindeselia
Vous devez vous connecter pour publier un commentaire.
Règles pour identifier les noms dans C++ sont:
Les sections dans le C++ projet de norme qui couvrent ce sont
2.11
Identificateurs qui comprend la grammaire suivants:et
2.12
mots-clés explique tous les identificateur réservé pour une utilisation en tant que mots clés.Enfin, les noms suivants sont également réservés:
__
ou commencer par un caractère de soulignement suivi par une lettre majuscule (comme_Apple
) dans toute la portée,_apple
dans l'espace de noms global) sont réservés.La section qui traite ce dans le projet de norme est
17.6.4.3.2
. Nous pouvons trouver les raisons pour lesquelles ceux-ci sont réservés à partir de Justification de la Norme Internationale—Langages de Programmation—C qui dit:Dans C++ cela s'applique également à name mangling que ce exemple montre.
Notes de bas de page
L'universel de caractères autorisés est couvert dans
Annex E.1
:Depuis, étonnamment, je n'ai pas réussi à en trouver un en double, ou plus généralement de version, de cette question, voici la réponse en fonction de ce que le Standard C++11) dit.
Tout d'abord, par le §9/1, un nom de classe est un identificateur (ou un simple-modèle-id dans le cas d'un modèle de spécialisation, mais un simple-modèle-id est également composé de identificateurs).
§2.11 définit ce qu'est un valide identificateur est. Il présente d'abord quelques concepts de base:
Un chiffres est l'un de ces:
0 1 2 3 4 5 6 7 8 9
Un alphabétique et non numérique est l'un de ces:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
Un universelle-personnage-nom est une séquence de type
\unnnn
ou\Unnnnnnnn
(où chaquen
est un chiffre hexadécimal)La Norme définit alors un identifiant alphabétique et non numérique comme
Enfin, identificateur est définie de manière récursive comme
Résumé: En d'autres termes, un identificateur doit commencer par une (non-chiffres!) caractère alphabétique, qui peut être suivie par tout composé de caractères alphanumériques, traits de soulignement et
\unnnn
comme le personnage de références. Tout le reste est spécifique à l'implémentation.(‡) Si tout est pris en charge dépend de votre compilateur, et en les utilisant en général signifie que vous perdre de la portabilité vers d'autres compilateurs ou des versions de compilateur.
Réponse Simple est non. Pour vous exemple pourquoi ne pas l'appeler OneDArray?
Noms en C++ doit commencer par une "lettre", où la lettre est tous les majuscules et les minuscules "A-Z, a-z". '_' compte également comme une 'lettre'. Il peut être suivi par n'importe quelle combinaison de lettres et de chiffres.