Скорость: typedef против #define в C ++ - PullRequest
0 голосов
/ 01 мая 2020

Недавно я сталкивался с typedef с и #define с. Даже при том, что они имеют похожее использование, один из них является токеном компилятора, а другой - токеном препроцессора.

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

Итак, какой из них относительно быстрее? Объяснение, сопровождаемое ответом, было бы здорово. Будет ли используемый компилятор иметь какую-либо разницу, как g++ против MSVC compiler против clang компилятор?

Примеры использования: typedef long long int и #define ll long long int.

Ответы [ 4 ]

3 голосов
/ 01 мая 2020

Они оба занимают одинаковое количество времени. Вы не заметите никакой разницы.

Также обратите внимание, что при правильном использовании они идентичны во время выполнения. Только во время компиляции они могут немного отличаться, но это почти ничего.

2 голосов
/ 01 мая 2020

Различий в производительности нет, но макросы препроцессора не рекомендуются, поскольку они загрязняют глобальную область видимости, поскольку, в отличие от typedef, их нельзя поместить в пространство имен.

Но, возможно, ll isn не очень выразительный; это может сделать код менее читабельным. Попробуйте использовать int64_t из <cstdint>. Это хорошо, потому что он более выразителен (_t четко указывает на то, что это тип, а его размер ровно 64 бита, и поэтому он рассчитан на будущее, даже когда long long равен 128 битам), и относительно лаконичен, поэтому нет необходимости в typedef что-нибудь.

1 голос
/ 01 мая 2020

Если вы заботитесь об использовании функций c ++, лучшим вариантом будет использование ключевого слова using, доступного с c ++ 11 и специально разработанного для этой цели. Он также совместим с шаблонами.

Обратите внимание, что и using, и typedef семантически одинаковы.

https://en.cppreference.com/w/cpp/language/type_alias

0 голосов
/ 01 мая 2020

Нет разницы во времени выполнения, поэтому вы должны хорошо использовать любое из них для конкурентного программирования.

Лично я избегаю #define и использую typedef для типов, так как он более чистый и читаемый.

...