我需要拋出異常並打印一些有用的消息。我嘗試這樣做:我們如何才能用一條消息來拋出一個表達式?
throw std::exception("message");
throw std::exception(std::string("message"));
,直到我發現std::exception
had only two constructors:
exception();
exception(const exception& other);
那麼,什麼是好辦法?
我需要拋出異常並打印一些有用的消息。我嘗試這樣做:我們如何才能用一條消息來拋出一個表達式?
throw std::exception("message");
throw std::exception(std::string("message"));
,直到我發現std::exception
had only two constructors:
exception();
exception(const exception& other);
那麼,什麼是好辦法?
你可以嘗試把它像這樣:
#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);
的std ::例外,有一個內置的虛擬叫。什麼()來檢索本地的東西泛型catch語句中的異常。這是給你設置的。
否則除非特意抓住,並考慮從捕獲記錄,這本身並不是壞習慣,但當然如果你想在一個遠離理想的地方使用同樣的例外,如果你想要一個集中的信息(這是最好的這樣如果你想記錄你抓到的而不是什麼)。 ()是我所知道的唯一有保證的共同性。所有的捕獲都是有風險的,因爲沒有辦法讓捕獲所有人知道你的具體異常的細節。
您應該使用派生類型。例如,拋出std :: runtime_error(「message ...」)或拋出std :: invalid_argument(「message ...」)。 – 2015-03-25 05:39:57
部分邏輯是當運行時內存不足時,它會拋出std :: bad_alloc這是一個std :: exception。如果'std :: exception'需要內存來存儲有用的消息,創建一個'std :: bad_alloc'將是一個真正的問題:你需要內存來報告你內存不足(!) – MSalters 2015-03-25 09:16:47