91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

C++編譯時為什么檢查比執行時檢查更好

發布時間:2021-11-24 16:39:14 來源:億速云 閱讀:100 作者:iii 欄目:大數據

這篇文章主要講解了“C++編譯時為什么檢查比執行時檢查更好”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++編譯時為什么檢查比執行時檢查更好”吧!

P.5: Prefer compile-time checking to run-time checking(編譯時檢查比執行時檢查更好)

Reason(原因)

Code clarity and performance. You don't need to write error handlers for errors caught at compile time.

代碼的清晰和性能。你不需要為編譯錯誤編寫處理程序。

譯者注:編譯時檢查不會占用執行時間,因此可以帶來更好的性能;編譯檢查一般都是利用編譯器,語言的基本功能,檢查代碼也會清晰明了。

Example(示例)

// Int is an alias used for integersint bits = 0;         // don't: avoidable codefor (Int i = 1; i; i <<= 1)    ++bits;if (bits < 32)    cerr << "Int too small\n";

This example fails to achieve what it is trying to achieve (because overflow is undefined) and should be replaced with a simple static_assert:

這個例子無法達成它想要達成的目標(因為溢出時的行為是無定義的)。它可以被一個簡單的static_assert代替:

譯者注:

  1. 代碼應該是想通過一個循環的左移操作計算Int的位數,如果小于32位就報錯。這是一種運行時檢查的方式。

  2. static_assert支持編譯時的斷言檢查。

// Int is an alias used for integersstatic_assert(sizeof(Int) >= 4);    // do: compile-time check

Or better still just use the type system and replace Int with int32_t.

或者直接使用類型系統并且用intr32_t代替Int。

Example(示例)

void read(int* p, int n);   // read max n integers into *p
int a[100];read(a, 1000);    // bad, off the end

better(好一點)

void read(span<int> r); // read into the range of integers r
int a[100];read(a);        // better: let the compiler figure out the number of elements

譯者注:使用指針傳遞數據的read可以使用int型的大小信息進行范圍檢查但是這種檢查只能在執行時進行;而span包含了數組的尺寸信息,如果數組長度在編譯時可以確定,span就可以實現編譯時的范圍檢查。

Alternative formulation: Don't postpone to run time what can be done well at compile time.

另一個表達:編譯時能做的,就不要延遲到執行時。

Enforcement(執行建議)

  • Look for pointer arguments.注意指針類型參數。

  • Look for run-time checks for range violations.注意運行時刻對范圍違反的檢查。

譯者注:通過指針傳遞數據之后,大小信息也作為變量傳遞,因此之后的范圍檢查都只能在執行時進行。有了模板類span之后,這些檢查都可以重新考慮,看看是否可以轉變成編譯時檢查。

感謝各位的閱讀,以上就是“C++編譯時為什么檢查比執行時檢查更好”的內容了,經過本文的學習后,相信大家對C++編譯時為什么檢查比執行時檢查更好這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

c++
AI

新乡县| 天柱县| 绿春县| 游戏| 晴隆县| 平远县| 定襄县| 阿荣旗| 临高县| 德庆县| 元朗区| 福清市| 元谋县| 鄂托克旗| 南乐县| 巫溪县| 海原县| 伊金霍洛旗| 潍坊市| 扶绥县| 桑日县| 兴海县| 哈密市| 昌平区| 体育| 盖州市| 交城县| 木里| 墨竹工卡县| 吴桥县| 新和县| 平安县| 周至县| 泰兴市| 彭水| 威远县| 蒙城县| 房山区| 铅山县| 离岛区| 英吉沙县|