這個問題是由C :有一個指向函式的指標作為屬性的類
的帖子激發的。我遇到了一個與帖子中描述的類似的問題。它是關于如何正確宣告一個函式指標的方法。這對我來說似乎很有用,因為你可以宣告一個函式指標,然后再分配它,使程式更加通用。帖子中描述的三種方法是:
- 第一種情況很明顯是 "在"。
- 第一種情況顯然是錯誤的,它宣告了一個回傳 void 指標的函式
void* func()。 - 這種方式得到了支持,并被標記為解決方案。它對我的特殊情況不起作用
void *(func)()。這種情況似乎與之前的情況相同。 - 第三條評論,也是對我有效的一條
void (*func)()。這對我來說似乎很清楚,該定義是一個指向void函式的指標。
我的問題被總結為。第二個和第三個宣告之間的主要區別是什么?
uj5u.com熱心網友回復:
你鏈接上的答案有一個錯字,HolyBlackCat糾正了它。正確的版本的確是void (*func)()。
如果你想真正做到通用,你可以使用std::function<void()>。這樣你可以存盤任何型別的可呼叫物件:函式、lambdas、可呼叫類。
uj5u.com熱心網友回復:
這是與優先級規則有關的。這與1 (2)*3和(1 2)*3之間的區別沒有什么不同
。
應用于C/C 中的宣告
void *(func)()
決議為void * (func)() -> void * func(),一個回傳void*的函式。
為了改變優先級,我們把 "*"系結到識別符號上。
void (*func)()
決議為一個指向回傳void和接收void的函式的指標。這是因為現在編譯器必須同時決議標簽和指標,從而知道 "func "是指向某個東西的指標。
這都是因為"() "比 "*"有更高的優先級
。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/313401.html
標籤:
上一篇:如何在java中把變數值從一個頁面繼承到另一個頁面?
下一篇:實作所需類層次行為的最佳方式
