簡體   English   中英

`using namespace ...` 會增加編譯時間還是會以某種方式影響性能?

[英]Does `using namespace ...` increase compilation time or can it somehow affect performance?

using namespace ...增加編譯時間還是會以某種方式影響性能? 我聽說這會稍微影響編譯時間,但是,為什么?

它稍微增加了編譯時間,因為在名稱查找期間考慮了更多的地方,但沒有什么重要的。 它根本不影響運行時性能。

tldr不,它既不影響編譯時間也不影響運行時

嚴格來說,源代碼中的每一次更改都會修改編譯時間。 using 指令、using 語句和所有形式的別名不會以任何有意義或值得注意的方式影響編譯時間。

至於運行時性能,生成代碼是相同的,因此絕對不會對性能產生任何影響。

總之,不要擔心,一點也不擔心。


我想挑戰Ayxan 的說法,即編譯時間增加,因為在名稱查找過程中考慮的地方越多。 我可以反駁:編譯時間減少了,因為嵌套命名空間只在 using 指令上查找一次,而不是在每個限定名稱上。

考慮一下:

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
  • nsc必須在nsb命名空間中nsb
  • nsd必須抬起頭來對nsc命名空間
  • class_x必須抬起頭來對nsd命名空間
  • 重復以上所有次數(對於所有合格的項目)

在第二種情況下

  • 像以前一樣,查找nsa在全局命名空間, nsbnsa等,除了只有一次,在使用過程中的指令。
  • 在表查找中為 using 指令添加條目
  • 在全局命名空間中查找class_x + using 指令帶來的條目。 對所有不合格的名稱執行此操作。

我並不是說一個比另一個快。 我是說它不是那么簡單和黑白分明。 如果沒有合適的基准測試(研究真的是因為代碼庫差異很大),我們不知道。 無論如何,我的觀點是無論如何都不重要,因為任何差異實際上都無關緊要。

關於性能,它沒有。

命名空間用於進行邏輯分組並避免 C++ 應用程序中潛在的命名沖突。 使用命名空間不會對應用程序大小或性能造成任何開銷

但...

...以這種方式將這樣一個命名空間的全部內容引入當前范圍違背了命名空間的目的

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

關於編譯時間,我找不到太多關於它的文檔,但似乎是雙方同意的,雖然它對它有輕微影響,但差異可以忽略不計,幾乎無法衡量。

C++ 性能:使用聲明性 Vs 使用聲明 Vs 使用直接來自庫的名稱

對於 C#

使用命名空間會影響性能或編譯時間嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM