static const vs #define

Est-il préférable d'utiliser static const vars que #define préprocesseur? Ou peut-être que ça dépend du contexte?

Quels sont les avantages/inconvénients de chaque méthode?

  • Scott Meyers couvre ce sujet très bien et à fond. Son Point#2 dans "Effective C++ Troisième Édition". Deux cas particuliers (1) static const est préféré à l'intérieur d'une étendue de classe pour la classe spécifique constantes; (2) d'espace de noms, d'anonymes ou de portée const est préféré à #define.
  • Je préfère les Énumérations. Parce qu'il est hybride des deux. N'occupe pas l'espace, sauf si vous créez une variable d'elle. Si vous voulez juste utiliser comme une constante , enum est la meilleure option. Il a le type de la sécurité en C/C++11 mst et aussi un parfait constante. #define est de type dangereux , const prend de l'espace si le compilateur ne peut pas optimiser.
  • Ma décision d'utiliser #define ou static const (pour les chaînes) est entraînée par la initialisation aspect (il n'a pas été mentionné par les réponses ci-dessous): si la constante est utilisée dans les unité de compilation, puis-je aller avec static const, sinon j'utilise #define - éviter statique de l'initialisation de la commande fiasco isocpp.org/wiki/faq/ctors#static-init-order
  • Si const, constexpr ou enum ou toute variation de travaux dans votre cas, alors la préfère à #define
  • statique de l'initialisation de la commande fiasco" Comment est-ce un problème pour les constantes?