std::invalid_argument应用

参考http://www.cnblogs.com/couhujia/archive/2012/10/23/2735682.html

std::invalid_argument ,一个异常类的子类,用于异常检查

值得注意的是其中出现了

1.

 ~InvalidPeople() throw() {}

的用法

参考http://www.cnblogs.com/mumuliang/archive/2012/03/22/2411521.html

这种写法规定了抛出的类型

throw()就是什么都不可以抛出,throw(std::string, int) 那么只能抛出 std::string 和 int  . 同理......


2.

#define TTOSTRING(x) #x
#define TOSTRING(x) TTOSTRING(x)

ErrorInfo ei(__FILE__,TOSTRING(__LINE__),__PRETTY_FUNCTION__);

__FILE__ 包含当前程序文件名的字符串
__LINE__  表示当前行号的整数
__DATE__ 包含当前日期的字符串
__STDC__  如果编译器遵循ANSI C标准,它就是个非零值
__TIME__ 包含当前时间的字符串

他那个例子用gcc编译的,如果用ms系列编译器应该把__PRETTY_FUNCTION__换成__FUNCTION__.
由于__LINE__ 为int类型而我们要换成std::string  于是用到 #define TOSTRING(x) #x  
定义宏里用到# 就会转换成字符串 #x -->  "x"
通常情况下
#define TOSTRING(x) #x 就可以了 , 但如果出现嵌套宏如__LINE__
__LINE__ 本身就是宏()  那么
在#define TOSTRING(x) #x下, 就会 "__LINE__"
我们再加一层
#define TTOSTRING(x) #x
#define TOSTRING(x) TTOSTRING(x)
就会展开宏定义里的宏

猜想:__LINE__宏的替换一定要在 #x前面,所以我们多加了一层。。。。
(这应该和编译原理有关,我还没学这么课。。先放着)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值