我們可以像下面的代碼片段一樣使用名稱空間嗎?代碼在gcc和msvc中編譯,讓我對命名空間的用法感到困惑。在C++中使用名稱空間
在f1.h:
namespace My { void foo(); }
在f1.cpp '
void My::foo() { }
我認爲功能應該被定義爲:
namespace My { void foo() {} }
任何人都可以善意解釋N +
謝謝
我們可以像下面的代碼片段一樣使用名稱空間嗎?代碼在gcc和msvc中編譯,讓我對命名空間的用法感到困惑。在C++中使用名稱空間
在f1.h:
namespace My { void foo(); }
在f1.cpp '
void My::foo() { }
我認爲功能應該被定義爲:
namespace My { void foo() {} }
任何人都可以善意解釋N +
謝謝
只要名稱空間的名稱前綴是名稱空間的名稱,並且該名稱空間實際上是在封裝名稱空間的名稱空間中進行定義,那麼在名稱空間外部定義名稱空間成員是合法的。它不能發生在嵌套在成員命名空間內的命名空間中。
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 ::」,您表示您正在使用「My」命名空間。
,你可以聲明一個STL向量作爲「的std ::矢量< 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() {}
,如果你不想寫「我::」在每一個功能,開始喲你把它寫成第一個。當有多個命名空間時,第二個是有用的
它與do相同:using std namespace;在頂部,只是做cout而不是做std :: cout。兩者都可以工作,兩者都有效,但你必須考慮如何使用它們。有專業和缺點。
我想,這是允許的:
namespace My
{
void foo();
}
,因爲這意味着,如果一個實用的方法是很長時間不弄亂的頭文件。這樣,更明顯的是名稱空間中提供了哪些方法。
我知道這可能與現代IDE的表現力無關,但它仍然有助於擁有乾淨的頭文件。
哪種方式比較習慣? – Philipp 2010-07-09 08:32:57
@Philipp我直接定義內聯函數,並分別定義其他函數。尤其是如果有一個頭文件/實現文件分離。 – 2010-07-09 08:34:27
這不是一種重言式嗎?在類定義中定義的函數始終是內聯的。我的意思是使用'A :: f'或'namespace A {f}'來定義獨立函數。至少Boost似乎更喜歡後者。 – Philipp 2010-07-09 10:16:27