使用`using namespace ...`会增加编译时间或者对性能有影响吗?

3

using namespace ...会增加编译时间或者在某种程度上影响性能吗?我听说它会稍微影响编译时间,但是为什么呢?


2
  1. 稍微一点。
  2. 不会,假设你在谈论运行时性能。
- user207421
在全局范围内使用 using namespace std; 可能会导致意外行为,通常在全局范围内使用 using namespace 是程序员的责任。 - Swift - Friday Pie
3
想了解更多不要使用 using namespace std; 的原因,请阅读 为什么“using namespace std;”被认为是一种不好的做法? - Ted Lyngmo
3个回答

5

它会稍微增加编译时间,因为在名称查找期间会考虑更多的位置,但不会有明显的影响。它对运行时性能没有任何影响。


3

tldr 不影响编译时间和运行时。

严格来说,源代码的每一次更改都会修改编译时间。使用指令、使用语句和各种别名在任何有意义或值得注意的方式下都不会影响编译时间。

至于运行时性能,生成的代码是相同的,因此绝对没有任何性能影响。

总之,请放心,这对程序没有丝毫影响。


我希望挑战Ayxan statement,即名称查找时考虑的位置越多,编译时间就会增加。我可以提出相反的观点:编译时间会减少,因为嵌套命名空间只需在使用指令上查找一次,而不是在每个限定名称上查找。
考虑以下情况:
auto x = nsa::nsb::nsc::nsd::class_x{};
auto y = nsa::nsb::nsc::nsd::class_y{};
auto z = nsa::nsb::nsc::nsd::class_z{};

对比

using namespace nsa::nsb::nsc::nsd;

auto x = class_x{};
auto y = class_y{};
auto z = class_z{};

在第一种情况下:
  • 必须在全局命名空间中查找nsa
  • 必须在nsa命名空间中查找nsb
  • 必须在nsb命名空间中查找nsc
  • 必须在nsc命名空间中查找nsd
  • 必须在nsd命名空间中查找class_x
  • 对所有限定项重复上述步骤三次
在第二种情况下:
  • 就像前面一样,在全局命名空间中查找nsa,在nsa等中查找nsb。除了在使用指令期间只查找一次。
  • 在表格查找中添加使用指令的条目
  • 在全局命名空间和使用指令带来的条目中查找所有未限定名称的class_x
我并不是说其中一个比另一个快。我是在说这并不像看起来那么简单和明显。如果没有适当的基准(因为代码库差异很大,所以需要进行研究),我们就不知道。无论如何,我的观点是,这并不重要,因为实际上任何差异都无关紧要。

1
关于性能,它没有影响。
命名空间用于在C++应用程序中进行逻辑分组并避免潜在的命名冲突。使用命名空间不会增加应用程序的大小或性能开销。
但是...
以这种方式将命名空间的全部内容引入当前作用域,会使命名空间的目的失效。

https://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1046398336&id=1043284351

关于编译时间,我找不到太多相关文档,但似乎普遍认为,虽然它会略微影响编译时间,但差异可以忽略不计,接近无法测量。
对于C ++: C ++性能:使用声明 vs 使用声明 vs 直接从库中使用名称 对于C#: 使用命名空间是否会影响性能或编译时间?

是的,但这只涉及应用程序性能。它没有触及编译影响。 - bolov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接