c++學習之命名空間和異常

命名空間

        c++中有命名空間的概念,不過貌似用的不多,但是也不可缺少,這裏就記錄一下最常用的情況吧。之前所有的代碼中都有using namespace std;這一句話,就是說我們的代碼和std命名空間是在同一個空間的,空間的概念,其實就是一個容器,我們將類,函數等都存放在容器中的,所以,我們可以定義多個容器,這多個容器之間是互不影響的。之所以我們的代碼中都有std命名空間,那是因爲,C++所有的庫函數都是聲明在std標準命名空間中的,因此要調用的話,我們的代碼也需要在std空間。

        我們以最簡單的helloworld程序爲例,編譯如下代碼,因爲該代碼不存在於標準的命令空間中,所以我們是無法調用標準庫函數的。

#include <iostream>

int main()
{
	cout << "helloworld" << endl;
	return 0;
}
        編譯報錯後的結果顯而易見了。

--------------------Configuration: ExceptionStudy - Win32 Debug--------------------
Compiling...
Main1.cpp
D:\CPLUSPLUSPROJECTS\ExceptionStudy\Main1.cpp(5) : error C2065: 'cout' : undeclared identifier
D:\CPLUSPLUSPROJECTS\ExceptionStudy\Main1.cpp(5) : error C2297: '<<' : illegal, right operand has type 'char [11]'
D:\CPLUSPLUSPROJECTS\ExceptionStudy\Main1.cpp(5) : error C2065: 'endl' : undeclared identifier
執行 cl.exe 時出錯.

Main1.obj - 1 error(s), 0 warning(s)

        提示cout << endl;均無法找到相關標識符。只要在main函數上加入using namespace std即可。

異常

        看看c++中的異常吧。c++異常其實和java異常一樣,都是標準的try{}catch(){}結構。我們在try語句塊中執行可能會出錯的代碼,並且根據出錯的情況throw出對應的異常。然後在catch()中捕捉這個異常的類型,並在catch(){}代碼塊中執行錯誤處理。舉個最簡單的例子。  

#include <iostream>
using namespace std;
int main()
{
	int i = 1;
	if(sizeof(i) == 4)
		try{
			throw i;
	}catch(int j){
		cout << "exception : " << j << endl;
	}catch(...){
		cout << "Exception..." << endl;
	}
	return 0;
}

        先說下代碼執行後的結果。



        這裏我們僅僅在try語句塊中拋出這個異常,然後在catch語句中捕捉並處理,處理的語句很簡單,就是打印。呵呵。

        再看看後面這一句catch(...) catch的類型是三個點號,由於一段代碼可能會拋出各種錯誤,所以catch語句會很多,因此出現捕捉三個點號的情況,這個語法主要是想說明三個點號可以代替所有的類型,如果catch語句太多的話,那麼只用捕捉點號就好了,這樣能捕捉到所有的異常類型。

        還有一種情況,如果所有的catch語句都沒有捕捉到拋出的類型,那麼程序會終止,系統會調用相關的庫函數來終止當前的上下文。





發佈了59 篇原創文章 · 獲贊 10 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章