“C++的一個問題是有太多的庫,但是沒有一個大賣場有所有這些庫。C++不是對GUI支持不好。C++有GUI庫。問題是C++有25個GUI庫。有些 GUI庫不錯。但是人們說:“可是C++沒有標(biāo)準(zhǔn)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采訪,我想,這樣的局面也導(dǎo)致了目前C++對錯誤沒有一個統(tǒng)一的處理方式,不象JAVA可以統(tǒng)一采用異常的錯誤處理方式(我曾看過經(jīng)JMS重寫 的CMS--ActiveMQ CMS,里面一律采用異常,包括構(gòu)造/析構(gòu)函數(shù)),因為它需要兼顧C(jī)/C++/SDK中各自不同的錯誤處理方式。
不應(yīng)該發(fā)生的錯誤如果發(fā)生了,那就是程序員的過錯,此時就該使用ASSERT斷言了。
不能用拋出異常來代替斷言。
斷言采用如下形式:
1
unsigned int Employee::GetID()
2

{
3
assert(m_nID!=0 && "Employed ID is invalid(must be nonzero");
4
return m_nID;
5
}
附C++錯誤處理相關(guān)文章:
http://msdn2.microsoft.com/zh-cn/library/ms809695.aspx (考慮錯誤情況)
http://blog.csdn.net/pongba/archive/2007/10/08/1815742.aspx(錯誤處理(Error-Handling):為何、何時、如何)
《
契約式設(shè)計的理解及其在c/c++中的應(yīng)用》
Robert Schmidt《C與C++中的異常處理》