C ++ #define или typedef и функции?

Хотя #define и typedefs могут использоваться для получения одинаковых результатов, мне было интересно, является ли один из этих вариантов более элегантным или более быстрым, чем другой. Есть ли причина, по которой я должен предпочесть typedefs и функции, а не #define?

#define unt uint32_t

#define msin(x) std::sin(x)

namespace LL {
typedef uint32_t unt;

float sin(float x) {
    return std::sin(x);
}
}  // namespace LL

Всего 1 ответ


Мне было интересно, если один из этих вариантов ... быстрее

Ни typedef, ни macro не работают быстрее, если учитывать время выполнения. Может быть, теоретически можно быстрее скомпилировать, но, возможно, незначительным образом.

Функция вряд ли будет работать медленнее, если она развернута в строке.

Мне было интересно, если один из этих вариантов является более элегантным

Typedef и функция более элегантны. Всегда используйте их вместо макросов. Они являются регулярным идентификатором и следуют правилам пространства имен. Макросы не зависят от пространства имен.

Такие функции, как макросы, особенно проблематичны, и их аргументы не ведут себя так, как их ожидают новички. Кроме того, сообщения об ошибках будут намного понятнее с функциями.

Но также подумайте, нужна ли в первую очередь функция typedef или функция-обертка. Часто может быть непродуктивным, чтобы запутать основной тип или функцию.


Макросы полезны для: защиты заголовков (если вам не нравится #pragma один раз), повторяющихся объявлений (некоторым может не понравиться этот вариант использования), межсистемного переноса (например, для обнаружения функций и системных атрибутов)


Есть идеи?

10000