Альтернативы использованию «#define» в C++? Почему это осуждается?

Я занимаюсь разработкой C++ менее года, но за это время я слышал от многих людей, что #defineэто ужасно. Теперь я понимаю, что он интерпретируется препроцессором, а не компилятором, и поэтому не может быть отлажен, но так ли это плохо?

Вот пример (непроверенного кода, но общее представление вы поняли):

#define VERSION "1.2"

#include <string>

class Foo {
  public:
    string getVersion() {return "The current version is "+VERSION;}
};
  1. Почему этот код плохой?
  2. Есть ли альтернатива использованию #define?
10
задан Brian Tompsett - 汤莱恩 25 June 2016 в 18:28
поделиться