[英]Type of function pointer that receives and returns function pointer?
指向int f(int i) { return i; }
的指針的類型 int f(int i) { return i; }
是int (*)(int)
- 這很好。 另外,如果我using f_ptr = int (*)(int)
設置,即f_ptr
是指向f()
的指針的類型,則指向f_ptr g(f_ptr fp) { return fp; }
f_ptr g(f_ptr fp) { return fp; }
自然是f_ptr (*)(f_ptr)
- 這也很好。
如果是這樣,我覺得不using
的f_ptr (*)(f_ptr)
應該是int (*)(int) (*[variable comes here])(int (*)(int))
因為,好吧,當你只需將f_ptr
替換為int (*)(int)
,因為它是用using
定義的,但這實際上只會導致語法錯誤。 實際類型是int (*(*[variable comes here])(int (*)(int)))(int)
但我不明白它是如何變成這樣的。
看來我的理解從根本上是錯誤的。 任何人都可以給我一個解釋或一個好的(希望不是那么深入......)資源來理解這一點嗎?
一個片段可能比文字更好:
int f(int i) {
return i;
}
using f_ptr = int (*)(int);
f_ptr g(f_ptr fp) {
return fp;
}
int main() {
// This makes sense.
f_ptr (*gp0)(f_ptr) = &g;
// This is correct, although I don't get it...
int (*(*gp1)(int (*)(int)))(int) = &g;
// If you simply replace `f_ptr` by `int (*)(int)` as it's so defined with `using`,
// I feel the type should become like this, which causes syntax error.
// int (*)(int) (*gp2)(int (*)(int)) = &g;
}
C++ 這樣做是為了與 C 兼容
C 這樣做是為了定義鏡像使用
int f(int i) {
return i;
}
using f_ptr = int (*)(int);
f_ptr g(f_ptr fp) {
return fp;
}
int main() {
// Definition
int (*fp0)(int) = &f;
// Use
int m = (*fp0)(1);
// Definition
int (*(*gp1)(int (*)(int)))(int) = &g;
// Use
int i = (*(*gp1)(fp0))(1);
}
除了使用中的*
是可選的,所以大家都寫
int n = fp0(1);
int j = gp1(fp0)(1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.