【发布时间】:2020-05-01 18:37:30
【问题描述】:
最近我遇到了typedefs 和#defines。尽管它们的用法相似,但其中一个是编译器令牌,另一个是预处理器令牌。
这让我想知道它们的运行速度,因为人们希望在竞争性编程中尽可能快。
那么,哪一个相对更快?附有答案的解释会很棒。使用的编译器会像g++ vs MSVC compiler vs clang 编译器有什么不同吗?
用例示例:
typedef long long int; 和 #define ll long long int。
【问题讨论】:
-
完全没有区别。运行代码时,类型和预处理器都不存在。
-
速度在什么意义上?编译时间?它们可能在编译时间上有所不同,但肯定是微不足道的。没有其他区别。宏 (
#define) 往往会破坏代码,因此不受欢迎。 -
您陷入了过早的优化。在设计合理的问题中,无论您如何优化常数因子,慢速算法都不会及时运行,而快速算法将很容易及时运行,而无需优化每一位。像这样的东西在竞争性编程中很少有关系。
-
请不要滥用
typedef使您的代码不可读。将变量和类型名称缩短到最低限度不会 使您的代码运行得更快,只会使其更难阅读和理解。如果您需要询问您的“竞争性”代码,此处不会很好地接收此类缩写。 -
对所有变量使用
long long int比选择将名称缩短为ll的影响更大。