![](/img/trans.png)
[英]should I use it or static_cast<void*> then static_cast<myType*> to avoid reinterpret_cast?
[英]what is the use of “static_cast<void>” in macro?
我看到這樣的宏定義:
#define ASSERT_VALID_PARAM(param, assertion) { static_cast<void>(param); if (!(assertion)) { throw InvalidParamError(#param, #assertion, __FILE__, __PRETTY_FUNCTION__, __LINE__); } }
我無法在這里找出對static_cast<void>(param)
。 對為什么需要這樣做有任何想法嗎?
此宏旨在通過某些驗證規則來驗證某個實參。 宏的邏輯部分由2部分組成:
param
是帶有有效名稱的真實參數。 這可以通過使用static_cast
,如果使用了非法名稱,則會生成編譯時錯誤。 assertion
的“真實性”。 這是通過簡單的否定if語句完成的。 如果參數是有效名稱,並且斷言失敗( assertion == false
),則使用傳入的參數作為字符串(使用Stringizing運算符# )來初始化InvalidParamError
,以初始化錯誤對象。
由於宏中param
參數的實際用法僅是字符串,因此必須使用實際代碼進行驗證。 由於不需要實際操作,因此使用static_cast,它會丟棄結果,並且有可能進行優化。 如果沒有該檢查,則可以傳遞任何值,該值將使斷言中的信息毫無意義。
這是“ C ++”的寫作方式
(void)param;
它使變量“使用”,從而禁用未使用變量的編譯器警告
static_cast<void>(param);
將評估param
並丟棄結果。
如果您不將演員表添加到void
:
4)如果new_type是void類型(可能是cv限定),則static_cast在對表達式的值求值后將其丟棄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.