速度:C++ 中的 typedef 与 #define
Speed : typedef vs #define in c++
最近我遇到了 typedef
s 和 #define
s。尽管它们的用法相似,但其中一个是编译器令牌,另一个是预处理器令牌。
这让我想知道他们的运行速度,因为人们希望在竞争性编程中尽可能快。
那么,哪个比较快呢?附有答案的解释会很棒。使用的编译器会有什么不同,比如 g++
vs MSVC compiler
vs clang
编译器?
用例示例:
typedef long long int;
和 #define ll long long int
.
它们花费的时间相同。您根本不会注意到任何差异。
另请注意,如果使用得当,它们在运行时是相同的。只有在编译时它们可能略有不同,但几乎没有什么。
执行时间没有差异,因此您可以将其中任何一个用于竞争性编程。
我个人避免使用 #define
并使用 typedef
作为类型,因为它更清晰易读。
如果您关心使用 c++ 功能,更好的选择是使用 using
关键字,该关键字从 c++11 开始可用并且专门为此目的而设计。它还与模板兼容。
请注意,using
和 typedef
在语义上是相同的。
在性能上没有差异,但不推荐预处理器宏,因为它们会污染全局范围,因为与 typedef
不同,它们不能放在命名空间中。
但可以说,ll
表达能力不强;它可能会降低代码的可读性。考虑使用 <cstdint>
中的 int64_t
。它很好,因为它更具表现力(_t
清楚地表明它是一种类型,它的大小恰好是 64 位,因此是面向未来的,即使 long long
是 128 位),并且相对简洁所以没有需要 typedef
任何东西。
最近我遇到了 typedef
s 和 #define
s。尽管它们的用法相似,但其中一个是编译器令牌,另一个是预处理器令牌。
这让我想知道他们的运行速度,因为人们希望在竞争性编程中尽可能快。
那么,哪个比较快呢?附有答案的解释会很棒。使用的编译器会有什么不同,比如 g++
vs MSVC compiler
vs clang
编译器?
用例示例:
typedef long long int;
和 #define ll long long int
.
它们花费的时间相同。您根本不会注意到任何差异。
另请注意,如果使用得当,它们在运行时是相同的。只有在编译时它们可能略有不同,但几乎没有什么。
执行时间没有差异,因此您可以将其中任何一个用于竞争性编程。
我个人避免使用 #define
并使用 typedef
作为类型,因为它更清晰易读。
如果您关心使用 c++ 功能,更好的选择是使用 using
关键字,该关键字从 c++11 开始可用并且专门为此目的而设计。它还与模板兼容。
请注意,using
和 typedef
在语义上是相同的。
在性能上没有差异,但不推荐预处理器宏,因为它们会污染全局范围,因为与 typedef
不同,它们不能放在命名空间中。
但可以说,ll
表达能力不强;它可能会降低代码的可读性。考虑使用 <cstdint>
中的 int64_t
。它很好,因为它更具表现力(_t
清楚地表明它是一种类型,它的大小恰好是 64 位,因此是面向未来的,即使 long long
是 128 位),并且相对简洁所以没有需要 typedef
任何东西。