簡體   English   中英

接收和返回 function 指針的 function 指針的類型?

[英]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) - 這也很好。

如果是這樣,我覺得不usingf_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.

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