速度:c++中的 typedef vs #define

问题描述 投票:0回答:4

最近,我遇到了 typedefs和 #defines. 尽管它们的用法相似,但其中一个是编译器令牌,另一个是预处理器令牌。

这让我对它们的运行速度产生了疑问,因为在竞争激烈的编程中,人们都希望自己的速度尽可能快。

那么,哪个相对更快呢?如果能解释一下并附上答案就好了。使用的编译器会不会有什么不同,比如 g++MSVC compilerclang 编译器?

用例。typedef long long int;#define ll long long int.

c++ g++ clang
4个回答
3
投票

性能上没有区别,但不推荐使用预处理器宏,因为它们会污染全局范围,因为不像 typedef 它们不能放在一个命名空间中。

但可以说。ll 不是很有表现力;它可能会使代码的可读性降低。可以考虑使用 int64_t<cstdint>. 这很好,因为它的表现力更强(_t 清楚地表明它是一个类型,其大小正好是64位,所以是面向未来的,即使在 long long 是128位),而且比较简洁,所以不需要用 typedef 任何事情。


3
投票

它们都需要同样的时间。你根本不会注意到任何区别。

另外请注意,如果使用得当,它们在运行时是相同的。只有在编译时间上它们可能会略有不同,但这几乎没有什么。


1
投票

如果你关心使用c++特性,更好的选择是使用 using 关键字,它从c++11开始就有了,并专门为此设计。它也与模板兼容。

请注意,这两个 usingtypedef 在语义上是一样的。

https:/en.cppreference.comwcpplanguagetype_alias。


0
投票

在执行时间上没有区别,所以你用其中一种来进行竞争性编程应该是没有问题的。

我个人避免使用 #define 并使用 typedef 类型,因为它更干净、更易读。

© www.soinside.com 2019 - 2024. All rights reserved.