2009-09-10 131 views
4

我很清楚使用命名空間,但是,我偶爾偶爾會遇到使用特定類的使用方法。例如:關於「使用」關鍵字的問題

#include <string> 
using namespace std; 
(...) 

但是 - 飄飛,我看到:

using std::string; 

我應該如何解釋這種情況下,「使用」?

乾杯

回答

23

使用的std :: string只是進口的std :: string到當前範圍(換言之,你可以用 '串',而不是 '的std :: string')未經::性病進口一切進入當前範圍。


編輯:澄清後評論。

+1

這樣做的目的是不污染你的當前命名空間和其他命名空間中的所有東西。例如,std命名空間擁有很多東西。如果你不需要大部分時間,那麼'使用std'並把它全部帶入是一件很愚蠢的事情。 – 2009-09-10 18:42:09

+4

一般的指導原則是不要在庫標題中使用「using ...」,因爲它會污染圖書館用戶的名字空間。請記住:無法撤消「使用」。 – jdehaan 2009-09-10 19:44:21

3

在這種情況下,它允許您在沒有限定的情況下綁定到名稱空間內的特定類型。與第一種允許您綁定到任何類型的案例相反。

3

您將能夠使用string類,而不需要將std ::放在它之前。然而,如果你想使用其他的東西,例如一個向量,那麼你需要使用std::vector

12

using namespace foo允許您訪問命名空間foo中的所有名稱沒有限定。 using foo::bar允許您在沒有資格的情況下使用bar,但不能使用foo中的任何其他名稱。

1

也讓事情變得更復雜的是有可能做到這一點:

class Base { 
protected: 
    void f(); 
}; 
class Fun: public Base { 
public: 
    using Base::f; 
}; 

,現在你有很好的公共方法。