[英]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.