簡體   English   中英

C++ 獲取 function 地址並在編譯時操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM