寫在前面:
早上學習STL,因為沒有加入代碼using namespace std 導致錯誤,發現對using namespace std 的用法不是很清楚,找了資料補課。
using namespace std 的用法
摘自
using namespace std;用的并不少!
---------------------------------------------------------------
實際上就是告訴編譯器,你類型是什么,在哪能找到。
常用的是using namespace std,就是說用C++的標準名字空間。
你也可以引用你自己的名字空間。比如說:
import "C:\\MyTest\\test.tlb"
using namespace CMyTest
就可以引用CMyTest內的各個類型名
看C++ prime
---------------------------------------------------------------
聲明該文件使用C++標準庫吧!
比如
#include <iostream>
using namespace std;
void main()
{
cout << "hello!" << endl;
}
如果不用using namespace std;這句,那么
std::cout << "hello!" <<endl;
這是名字空間的問題!具體參看有關書籍吧,新版的C++ 書應該都有介紹的!
---------------------------------------------------------------
using 指示符!
這是個名字空間問題,是標準C++引入的新概念!
具體在《C++Primer》第8.6節有詳細說明!
---------------------------------------------------------------
因為標準庫非常的龐大,所程序員在選擇的類的名稱或函數名時就很有可能和標準庫中的某個名字相同。所以為了避免這種情況所造成的名字沖突,就把標準庫中的一切都被放在名字空間std中。但這又會帶來了一個新問題。無數原有的C++代碼都依賴于使用了多年的偽標準庫中的功能,他們都是在全局空間下的。
所以就有了<iostream.h>和<iostream>等等這樣的頭文件,一個是為了兼容以前的C++代碼,一個是為了支持新的標準。
---------------------------------------------------------------
名字空間,實質上也是為了方便程序在不同平臺上正確的運行。
---------------------------------------------------------------
namespace是為了解決C++中的名字沖突而引入的。
什么是名字沖突呢?比如,在文件x.h中有個類MyClass,
在文件y.h中也有個類MyClass,而在文件z.cpp中要同時
引用x.h和y.h文件。顯然,按通常的方法是行不能的,
那怎么辦呢?引入namespace即可。例如:
在x.h中的內容為
// x.h
namespace MyNamespace1
{
class MyClass
{
public:
void f();
private:
int m;
}
};
在y.h中的內容為
// y.h
namespace MyNamespace2
{
class MyClass
{
public:
void f();
private:
int m;
}
};
然后在z.cpp中引入x.h和y.h
// z.cpp
#include "x.h"
#include "y.h"
void z::f()
{
//聲明一個文件x.h中類MyClass的實例x
MyNamespace1::MyClass x;
//聲明一個文件x.h中類MyClass的實例x
MyNamespace2::MyClass y;
//調用文件x.h中的函數f
x.f();
//調用文件y.h中的函數f
y.f();
}
名字空間實質上是一個作用域。
通過上面的一個實例應該知道名字空間的作用了吧