2015-03-25 65 views
2

我需要拋出異常並打印一些有用的消息。我嘗試這樣做:我們如何才能用一條消息來拋出一個表達式?

throw std::exception("message"); 
throw std::exception(std::string("message")); 

,直到我發現std::exceptionhad only two constructors

exception(); 
exception(const exception& other); 

那麼,什麼是好辦法?

+3

您應該使用派生類型。例如,拋出std :: runtime_error(「message ...」)或拋出std :: invalid_argument(「message ...」)。 – 2015-03-25 05:39:57

+0

部分邏輯是當運行時內存不足時,它會拋出std :: bad_alloc這是一個std :: exception。如果'std :: exception'需要內存來存儲有用的消息,創建一個'std :: bad_alloc'將是一個真正的問題:你需要內存來報告你內存不足(!) – MSalters 2015-03-25 09:16:47

回答

1

你可以嘗試把它像這樣:

#include <iostream> 

throw std::runtime_error(std::string("Failed: ") + message); 
throw std::runtime_error("Error: " + message); 

您也可以使用boost::format

throw std::runtime_error(boost::format("There is an exception") % message); 
1

的std ::例外,有一個內置的虛擬叫。什麼()來檢索本地的東西泛型catch語句中的異常。這是給你設置的。

否則除非特意抓住,並考慮從捕獲記錄,這本身並不是壞習慣,但當然如果你想在一個遠離理想的地方使用同樣的例外,如果你想要一個集中的信息(這是最好的這樣如果你想記錄你抓到的而不是什麼)。 ()是我所知道的唯一有保證的共同性。所有的捕獲都是有風險的,因爲沒有辦法讓捕獲所有人知道你的具體異常的細節。

相關問題