亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么使用未命名的命名空間以及它們的好處是什么?

為什么使用未命名的命名空間以及它們的好處是什么?

C++
搖曳的薔薇 2019-09-18 19:22:11
我剛剛加入了一個新的C ++軟件項目,我正在嘗試理解這個設計。該項目經常使用未命名的命名空間。例如,類定義文件中可能會出現這樣的情況:// newusertype.ccnamespace {  const int SIZE_OF_ARRAY_X;  const int SIZE_OF_ARRAY_Y;  bool getState(userType*,otherUserType*);}newusertype::newusertype(...) {...可能導致使用未命名的命名空間的設計注意事項是什么?有哪些優點和缺點?
查看完整描述

3 回答

?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

在匿名命名空間中有一些東西意味著它是本翻譯單元的本地(.cpp文件及其所有包含)這意味著如果在別處定義了具有相同名稱的另一個符號,則不會違反一個定義規則(ODR)。


這與具有靜態全局變量或靜態函數的C方式相同,但它也可以用于類定義(并且應該使用而不是static在C ++中使用)。


同一文件中的所有匿名命名空間都被視為相同的命名空間,不同文件中的所有匿名命名空間都是不同的。匿名命名空間相當于:


namespace __unique_compiler_generated_identifer0x42 {

    ...

}

using namespace __unique_compiler_generated_identifer0x42;


查看完整回答
反對 回復 2019-09-18
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

除了這個問題的其他答案之外,使用匿名命名空間還可以提高性能。由于命名空間中的符號不需要任何外部鏈接,因此編譯器可以更自由地對命名空間內的代碼執行積極的優化。例如,可以內聯在循環中多次調用一次的函數,而不會對代碼大小產生任何影響。


例如,在我的系統上,如果使用匿名命名空間,則以下代碼占用大約70%的運行時間(x86-64 gcc-4.6.3和-O2;請注意,add_val中的額外代碼使編譯器不想包含它兩次)。


#include <iostream>


namespace {

  double a;

  void b(double x)

  {

    a -= x;

  }

  void add_val(double x)

  {

    a += x;

    if(x==0.01) b(0);

    if(x==0.02) b(0.6);

    if(x==0.03) b(-0.1);

    if(x==0.04) b(0.4);

  }

}


int main()

{

  a = 0;

  for(int i=0; i<1000000000; ++i)

    {

      add_val(i*1e-10);

    }

  std::cout << a << '\n';

  return 0;

}


查看完整回答
反對 回復 2019-09-18
  • 3 回答
  • 0 關注
  • 872 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號