Quelle est la différence entre un macro et un const en C++?

J'étais posé cette question dans un entretien technique:

Quelle est la différence entre un const et une macro en C++?

Ma réponse a été qu'une macro est une directive de préprocesseur et il pourrait être difficile de déboguer l'application si vous utilisez une macro depuis, elle est remplacée par l'expression constante avant la compilation, tandis qu'un const peut avoir un identificateur de type et est facile à déboguer.

Quelqu'un pourrait-il point une autre différence et qui doit être privilégié?

EDIT:

De la documentation IBM pour le C++:

Voici quelques différences entre #define et la const type de qualificatif:

  1. La #define directive peut être utilisée pour créer un nom pour un numérique, de caractère ou chaîne de caractères constante, tandis qu'un const objet de tout type peuvent être déclarés.

  2. Const objet est soumis aux règles de portée pour les variables, tandis qu'une constante créé à l'aide de #define ne l'est pas. Contrairement à un const objet, la valeur d'une macro n'apparaît pas dans la source intermédiaire de code utilisé par le compilateur car ils sont développés en ligne. La ligne d'extension fait la macro, la valeur indisponible pour le débogueur.

  3. Une macro peut être utilisée dans une expression constante, comme un tableau lié, alors qu'un const objet ne peut pas. (Je pense que nous avons certainement besoin d'utiliser la macro pour définir array_size.

  4. Le compilateur n'a pas de type case à une macro, y compris les macro arguments.

La règle "Une macro peut être utilisée dans une expression constante, comme un tableau lié tandis que const objet ne peut pas." n'est en C et pas en C++.

OriginalL'auteur Amm Sokun | 2011-06-18