Il ya quelque temps, j'ai demandé des constantes std :: string correct idiom for std::string constants?. Ce que j'en ai retiré était et non pour utiliser les constantes std :: string mais utiliser des constantes de chaîne de caractères. Alors quel est le meilleur langage pour queidiome correct pour les constantes de chaîne de caractères (pas std :: string) en C++
#define FOO "foo"
const char * const FOO = "foo";
const char FOO[] = "foo";
caractéristiques Souhaitable
- get longueur au moment de la compilation. 1 & 3 mais pas 2 (sizeof ne fonctionne pas sur 2)
- peut être inclus dans .h sans le linker se plaindre. tous (je pense)
- pas de copies multiples en .o, en sortie liée . dépend du compilateur (probablement)
Il semble donc que # 3 est mieux, mais Scott Meyers dit utiliser # 2 (efficace C++ item # 1)
résumé des réponses
- utilisation joyeux modèle de code compliqué
- utilisation # 3
Le code du modèle se sent comme surpuissant. Donc pour l'instant je vais aveC# 3;
Mais je vais ruminer sur le code du modèle, la version macroisée le rend OKish; mais je n'aime pas le fait que ce n'est pas portable (qui sait, peut-être que gcc décidera que c'est faux aussi)
Euh, les fonctionnalités ne sont pas contradictoires. Argh, maintenant pour expliquer que je vais devoir ajouter une réponse. Ainsi soit-il.Cheers, –
#define fonctionne bien avec sizeof – pm100
@ pm100: il se comporte comme static en ce qu'il vous donne (1) et (2) au détriment de générer une copie dans chaque unité de compilation (bien qu'il soit garanti de ne pas être généré sauf s'il est réellement utilisé). –