[英]Why is including “using namespace” into a header file a bad idea in C++?
[英]Using namespace header file c++
我正在嘗試在編寫的某些代碼中獲得良好的結構,但是我不太確定頭文件。 我遇到的問題之一是:我知道我不應該在頭文件中包含名稱空間,但是我不知道將其放置在何處。
考慮以下標頭:
// deck.h
#pragma once
#include <vector>
#include "card.h"
using namespace std;
typedef vector<card> pile;
class deck{
public:
deck();
~deck();
void shuffle();
card takeCard();
int getSize();
private:
pile cDeck;
};
card.h中的代碼是卡結構的定義。 typedef甚至應該在頭文件中嗎? 如果是的話,如何避免使用std :: vector?
任何提示將被應用。
你根本不放。 使用std::vector
而不是vector
,只需鍵入5個其他字符。 typedef
可以放在頭文件中。
如您所知, using namespace std;
標頭中的是BAD。 為什么? 因為所有包含標頭的文件都會自動use namespace std;
,而且名稱沖突也相對容易,尤其是在大型項目中,客戶可能不知道自己隱式使用的using
指令。
另外,您可以use namespace std;
在標題的內聯函數定義中,
inline void f()
{
using namespace std;
cout << "bla" << endl;
}
或課程,
class Foo
{
using namespace std;
// rest
};
這樣,僅在其包圍范圍內有效地“看到”了using
情況。
刪除using指令很簡單,只需將代碼重寫為
// deck.h
#pragma once
#include <vector>
#include "card.h"
typedef std::vector<card> pile;
class deck{
public:
deck();
~deck();
void shuffle();
card takeCard();
int getSize();
private:
pile cDeck;
};
使用和使用名稱空間可以在實現中的函數內使用。 如果您要如上所述限制可能的沖突,並且確實需要使用“使用”或“使用命名空間”,請把它放在較小的函數中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.