最近,我遇到了 typedef
s和 #define
s. 尽管它们的用法相似,但其中一个是编译器令牌,另一个是预处理器令牌。
这让我对它们的运行速度产生了疑问,因为在竞争激烈的编程中,人们都希望自己的速度尽可能快。
那么,哪个相对更快呢?如果能解释一下并附上答案就好了。使用的编译器会不会有什么不同,比如 g++
与 MSVC compiler
与 clang
编译器?
用例。typedef long long int;
和 #define ll long long int
.
性能上没有区别,但不推荐使用预处理器宏,因为它们会污染全局范围,因为不像 typedef
它们不能放在一个命名空间中。
但可以说。ll
不是很有表现力;它可能会使代码的可读性降低。可以考虑使用 int64_t
从 <cstdint>
. 这很好,因为它的表现力更强(_t
清楚地表明它是一个类型,其大小正好是64位,所以是面向未来的,即使在 long long
是128位),而且比较简洁,所以不需要用 typedef
任何事情。
它们都需要同样的时间。你根本不会注意到任何区别。
另外请注意,如果使用得当,它们在运行时是相同的。只有在编译时间上它们可能会略有不同,但这几乎没有什么。
如果你关心使用c++特性,更好的选择是使用 using
关键字,它从c++11开始就有了,并专门为此设计。它也与模板兼容。
请注意,这两个 using
和 typedef
在语义上是一样的。
在执行时间上没有区别,所以你用其中一种来进行竞争性编程应该是没有问题的。
我个人避免使用 #define
并使用 typedef
类型,因为它更干净、更易读。