簡體   English   中英

在c ++中使用命名空間

[英]Usage of namespaces in c++

我們可以使用下面代碼段中的命名空間嗎? 代碼在gcc和msvc中編譯,讓我對名稱空間使用感到困惑。

在f1.h:

namespace My
{
 void foo();
}

在f1.cpp`中

void My::foo()
{
}

我認為該函數應該定義為:

namespace My {
void foo() {}
}

任何人都可以解釋一下嗎?

謝謝

只要名稱以其名稱空間的名稱為前綴,定義名稱空間成員在其名稱空間之外是合法的,並且該定義實際上發生在包含它的名稱空間中。 它不能發生在嵌套在成員命名空間內的命名空間中。

namespace A { void f(); }
void A::f() { } // prefix with "A::"

namespace B { }
void B::f() { } // invalid! not declared in B!

namespace C { void f(); }
namespace D { void C::f() { } } // invalid! D doesn't enclose C

namespace E {
  void f();
  namespace F {
    void E::f() { } // invalid! F is nested inside E!
  }
}

它與類成員相同,只要在名稱前加上類的名稱,您也可以在類之外定義函數。 但是對於類,必須先在其各自的命名空間中聲明命名空間成員,然后才能在其外部定義它們。

是的,沒關系。 通過執行“My ::”,您表示您正在使用“我的”命名空間。

與將STL向量聲明為“std :: vector <int>”的方式相同......

兩者都是真的

您可以在全局或每個函數中設置命名空間

namespace My {
//in this are functions are in "My" namespace
}

namespace Your {
//in this are functions are in "Your" namespace
}

My::foo() {}
My::bar() {}
Your::foo() {}

如果你不想在每個函數的開頭寫“My ::”,你就把它寫成第一個。 第二個在有多個命名空間時很有用

它與執行相同:使用std命名空間; 在頂部,只是做cout而不是做std :: cout。 兩者都有效,兩者都有效,但你必須考慮如何使用它們。 有利弊。

我喜歡這是允許的:

namespace My
{
 void foo();
}

因為這意味着如果實用程序方法很長,它不會使頭文件混亂。 這樣,更明顯的是命名空間中提供了哪些方法。

我知道這可能是現代IDE的表現力的一個零點,但它仍然有助於擁有干凈的頭文件。

暫無
暫無

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

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