3 回答

TA貢獻1862條經驗 獲得超6個贊
using namespace std
using std::swap

TA貢獻1801條經驗 獲得超16個贊
使用-聲明:
using std::vector;
使用指令:
using namespace std;
using namespace std;
std::
std
std
template< typename T >void foo( T& x, T& y){ using std::swap; // makes std::swap available in this function // do stuff... swap( x, y); // will use a T-specific swap() if it exists, // otherwise will use std::swap<T>() // ... }
簡單地說:您可以而且應該在實現文件中自由地使用聲明和指令之后的命名空間。 #include
指示和感覺很好。盡管重復了相反的斷言,使用聲明和指令的命名空間并不是邪惡的,它們也沒有違背名稱空間的目的。相反,它們是使名稱空間可用的原因。
A 使用-聲明
將名稱添加到本地范圍。一個 使用指令不;它只是在聲明名稱的作用域中呈現可訪問的名稱。例如: namespaceX { int i , j , k ;}int k ;void f1(){ int i = 0 ; using namespaceX ; // make names from X accessible i++; // local i j++; // X::j k++; // error: X::k or global k ? ::k ++; // the global k X::k ++; // X’s k}void f2(){ int i = 0 ; using X::i ; // error: i declared twice in f2() using X::j ; using X::k ; // hides global k i++; j++; // X::j k++; // X::k}
本地聲明的名稱(由普通聲明或使用聲明)隱藏同名的非本地聲明,并且在聲明點檢測到名稱的任何非法重載。
注意歧義錯誤 k++
在……里面 f1()
..全局名稱不優(yōu)先于全局范圍內可訪問的名稱空間中的名稱。這提供了防止意外名稱沖突的重要保護,而且-重要的是-確保不會從污染全局命名空間中獲得任何好處。
當聲明許多名稱的庫可以通過使用-指令訪問時,未使用名稱的沖突不被視為錯誤,這是一個很大的優(yōu)勢。 ...
我希望與傳統(tǒng)的C和C+程序相比,在使用名稱空間的新程序中使用全局名稱的情況會大大減少。名稱空間的規(guī)則是專門為“懶散”的全局名稱用戶制定的,而不是為了避免污染全局范圍的人而制定的。
std
#includes
- 3 回答
- 0 關注
- 446 瀏覽
添加回答
舉報