C ++ #define или typedef и функции? - PullRequest
0 голосов
/ 11 февраля 2020

Хотя #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 Ответ

1 голос
/ 11 февраля 2020

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

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

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

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

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

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

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


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...