[英]C++ get function address and operate it at compile time
我想在編譯時獲取 function 的地址,然后對其進行一些數學運算。 我可以在編譯時獲得 function 地址:
constexpr DWORD addr = (DWORD)Function;
但是當我嘗試對其進行一些數學操作時,我收到錯誤“Conversion is invalid in constant-expression evaluation”:
constexpr DWORD addr = (DWORD)Function >> 3;
我也試過這個:
constexpr void(*addr)() = Test >> 3;
但只要我理解,就不可能對 void 指針進行數學運算。 有沒有辦法做到這一點?
function 指針的值在編譯時是未知的,它在鏈接時是已知的。 因此,雖然可以獲得對 function 指針的引用,但您不能對其進行任何操作,因為編譯器不知道它的值:/
這個答案比我用 Bjarne 的一句話說得更好:
10.4.5 地址常量表達式
靜態分配的 object (§6.4.2) 的地址,例如全局變量,是一個常量。 但是,它的值是由 linker 分配的,而不是編譯器,所以編譯器無法知道這樣一個地址常量的值。 這限制了指針和引用類型的常量表達式的范圍。 例如:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.