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语句都没有捕捉到抛出的类型,那么程序会终止,系统会调用相关的库函数来终止当前的上下文。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值