“C++的一个问题是有太多的库,但是没有一个大卖场有所有这些库。C++不是对GUI支持不好。C++有GUI库。问题是C++有25个GUI库。有些 GUI库不错。但是人们说:“可是C++没有标准GUI库。”Python不一样。人们知道到哪里去找Python的GUI库。所以C++的问题是有太多库,但是所有的库市场宣传都做的不够(It's a problem of riches, plurality, and a lack of marketing)。搞C++的看来都很穷,没有钱来提供一个可以找到所有库的大卖场。”
以上摘自在2003年9月的JAOO会议上,Bill Venners对Bjarne Stroustrup采访,我想,这样的局面也导致了目前C++对错误没有一个统一的处理方式,不象JAVA可以统一采用异常的错误处理方式(我曾看过经JMS重写 的CMS--ActiveMQ CMS,里面一律采用异常,包括构造/析构函数),因为它需要兼顾C/C++/SDK中各自不同的错误处理方式。
不应该发生的错误如果发生了,那就是程序员的过错,此时就该使用ASSERT断言了。
不能用抛出异常来代替断言。
断言采用如下形式:
1unsigned int Employee::GetID()
2{
3 assert(m_nID!=0 && "Employed ID is invalid(must be nonzero");
4 return m_nID;
5}
附C++错误处理相关文章:
http://msdn2.microsoft.com/zh-cn/library/ms809695.aspx (考虑错误情况)
http://blog.csdn.net/pongba/archive/2007/10/08/1815742.aspx(错误处理(Error-Handling):为何、何时、如何)
《
契约式设计的理解及其在c/c++中的应用》
Robert Schmidt《C与C++中的异常处理》