constexpr 和reinterpret_cast:C 編譯出錯
考慮以下程式碼片段:
依 C 11標準,clang正確。此標準規定常數表達式不得涉及reinterpret_cast。這意味著程式碼片段中 ptr 的初始化無效。
正確的初始化聲明這種類型的表達式的正確方法是使用替代方法方法,如:
struct foo {<p> static constexpr intptr_t ptr = 0x1;<br>};<br></p>
雖然GCC 對原始程式碼片段的接受在技術上是不正確的,但它確實支援使用__builtin_constant_p 的解決方法宏:
struct foo {<p> static constexpr const void* ptr =<br><br></p>};<pre class="brush:php;toolbar:false">__builtin_constant_p( reinterpret_cast<const void*>(0x1) ) ? reinterpret_cast<const void*>(0x1) : reinterpret_cast<const void*>(0x1);
此解決方法允許 GCC 折疊非常量表達式並將其視為常數。不過,它不是 C 標準的一部分,應謹慎使用。
以上是為什麼初始化'constexpr”變數時'reinterpret_cast”會導致編譯錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!