您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++中為什么使用not_null<T>表明空是無效值”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++中為什么使用not_null<T>表明空是無效值”吧!
Reason(原因)
清晰性。一個使用not_null<T>參數的函數可以明確地表明:如果有必要,調用者有責任進行空指針檢查。類似的,返回not_null<T>的函數向調用者清晰的表明了不需要進行nullptr的檢查。
Example(示例)
not_null<T*>
makes it obvious to a reader (human or machine) that a test for nullptr
is not necessary before dereference. Additionally, when debugging, owner<T*>
and not_null<T>
can be instrumented to check for correctness.
not_null<T*>向讀者(人或機器)表明不需要在解引用之前進行nullptr檢查。另外,在調試的時候,onwer<T*>和not_null<T>可用于正確性檢查。
Consider:(考慮以下代碼:)
int length(Record* p);
When I call length(p)
should I check if p
is nullptr
first? Should the implementation of length()
check if p
is nullptr
?
在調用length(p)的時候需要首先檢查p是否是nullptr嗎?實現length()的時候應該檢查p是否為nullptr嗎?
// it is the caller's job to make sure p != nullptr
int length(not_null<Record*> p);
// the implementor of length() must assume that p == nullptr is possible
int length(Record* p);
not_null<T*>被假定不會是nullptr;T*可能是nullptr;兩者在內存上都表現為T*(因此不會付出額外的代價)。
Note(注意)
not_null
is not just for built-in pointers. It works for unique_ptr
, shared_ptr
, and other pointer-like types.
not_null不止適用于內置指針。它也適用于unique_ptr和shared_ptr以及其他類似指針的類型。
Enforcement(實施建議)
(Simple) Warn if a raw pointer is dereferenced without being tested against nullptr
(or equivalent) within a function, suggest it is declared not_null
instead.
(簡單)處于某個函數中的裸指針如果沒有進行nullptr(或等價的)檢查就解引用,則報警。建議定義為not_null。
(Simple) Error if a raw pointer is sometimes dereferenced after first being tested against nullptr
(or equivalent) within the function and sometimes is not.
(簡單)如果一個裸指針在解引用之前,有時會進行防空檢查有時又不檢查,報錯。
(Simple) Warn if a not_null
pointer is tested against nullptr
within a function.
(簡單)如果not_null指針在函數內部進行了防空判斷,報警。
感謝各位的閱讀,以上就是“C++中為什么使用not_null<T>表明空是無效值”的內容了,經過本文的學習后,相信大家對C++中為什么使用not_null<T>表明空是無效值這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。