溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++怎么通過拋出異常來表明函數(shù)無法執(zhí)行指定的任務

發(fā)布時間:2021-11-25 14:02:35 來源:億速云 閱讀:82 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“C++怎么通過拋出異常來表明函數(shù)無法執(zhí)行指定的任務”,在日常操作中,相信很多人在C++怎么通過拋出異常來表明函數(shù)無法執(zhí)行指定的任務問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++怎么通過拋出異常來表明函數(shù)無法執(zhí)行指定的任務”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

E.2:通過拋出異常來表明函數(shù)無法執(zhí)行指定的任務

Reason(原因)

To make error handling systematic, robust, and non-repetitive.

為了使用錯誤處理系統(tǒng)化,健壯和不繁瑣。

Example(示例)

struct Foo {
   vector<Thing> v;
   File_handle f;
   string s;
};

void use()
{
   Foo bar {{Thing{1}, Thing{2}, Thing{monkey}}, {"my_file", "r"}, "Here we go!"};
   // ...
}

這里vector和string的構(gòu)造函數(shù)可能無法為它們的元素分配足夠的內(nèi)存,vector構(gòu)造函數(shù)可能無法復制初始化列表中的內(nèi)容,F(xiàn)ile_handle有可能無法打開需要的文件。每種情況中,它們都會向調(diào)用者拋出異常以便處理。如果use()可以處理構(gòu)造bar對象時的錯誤,它們可以通過try/catry獲得控制。其他情況下,F(xiàn)oo的構(gòu)造函數(shù)可以在將控制權(quán)交給試圖構(gòu)建Foo的代碼之前正確地銷毀已經(jīng)構(gòu)造完成的成員。注意,代碼中沒有可以容納錯誤碼的返回值。

The File_handle constructor might be defined like this:

File_handle的構(gòu)造函數(shù)可能被定義成下面的樣子:

File_handle::File_handle(const string& name, const string& mode)
   : f{fopen(name.c_str(), mode.c_str())}
{
   if (!f)
       throw runtime_error{"File_handle: could not open " + name + " as " + mode};
}
Note(注意)

It is often said that exceptions are meant to signal exceptional events and failures. However, that's a bit circular because "what is exceptional?" Examples:

一般情況下會認為異常意味著重大的例外事件和錯誤。然而,這個問題多少有點繞,到底什么是例外?例如:

  • A precondition that cannot be met

  • 一個前提條件沒有滿足

  • A constructor that cannot construct an object (failure to establish its class's invariant)

  • 構(gòu)造函數(shù)無法構(gòu)造對象(無法建立類的不變式)

  • An out-of-range error (e.g., v[v.size()] = 7)

  • 越界錯誤(例如 v[v.size()]=7)

  • Inability to acquire a resource (e.g., the network is down)

  • 無法獲取資源(例如:網(wǎng)絡斷)

In contrast, termination of an ordinary loop is not exceptional. Unless the loop was meant to be infinite, termination is normal and expected.

相反,結(jié)束一個通常的循環(huán)不屬于異常。只要它不是無限循環(huán),中止就是正常和期待的。

Note(注意)

Don't use a throw as simply an alternative way of returning a value from a function.

不要使用將拋出異常作為從函數(shù)中返回結(jié)果的另一種方式使用。

Exception(例外)

有些系統(tǒng),例如硬實時系統(tǒng)要求保證一個動作在開始執(zhí)行之前就能確定其執(zhí)行時間小于某個固定值(通常很小)。這樣的系統(tǒng)只有在存在某種可以準確預測系統(tǒng)從拋出異常過程中恢復的最大時間的工具時才可以使用異常。

到此,關于“C++怎么通過拋出異常來表明函數(shù)無法執(zhí)行指定的任務”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI