2011-05-16 12 views
6

這是一個挑剔的事情,它可能只是我的強迫症爆發,但我想知道爲什麼標準異常類層次結構是按原樣設置的。標準異常等級體系結構的原因

exception 
    bad_alloc 
    bad_cast 
    bad_typeid 
    bad_exception 
    ios_base::failure 
    runtime_error 
    subclasses... 
    logic_error 
    subclasses... 

難道所有的bad_ *異常都只是lang_support_error之類的子類嗎?而ios_base :: failure似乎完全不合適。

是否有一些歷史或技術原因層次結構如此?

+3

只是去顯示設計異常層次結構是多麼困難(而且基本上毫無意義):-) – 2011-05-16 16:29:33

回答

3

如果我沒有記錯的邏輯是:

  • logic_error將是一個assert的相當,但與較溫和的行爲
  • runtime_error是所有其他的基礎

但是,正如您注意到的那樣,即使在標準庫本身中,它也不太適用。

我猜的主要問題是主觀性:是std::out_of_range a logic_errorruntime_error

這是主觀的......