这种typedef定义是什么意思?

Mic*_*ael 9 c++ typedef

我见过以下(C++):

typedef n *(m)(const n*, const n*);
Run Code Online (Sandbox Code Playgroud)

它是什么意思,怎么用?

我理解这个:

typedef n (*myFunctP)(const n*, const n*);
Run Code Online (Sandbox Code Playgroud)

但上面的typedef有什么区别?

(希望这没有重复,没有找到类似的东西...)

Lig*_*ica 12

我问geordi赢了一些代表:

<tomalak> << TYPE_DESC<m>; struct n {}; typedef n *(m)(const n*, const n*);
<geordi> function taking 2 pointers to constant ns and returning a pointer to a n
Run Code Online (Sandbox Code Playgroud)

C类型声明语法很糟糕,当你开始做这样的复杂声明时,它确实变得特别明显.注意返回类型和参数是如何写的m,而不是n,这完全是直觉,因为它m是你正在创建的.

你的第二个例子是:

<tomalak> << TYPE_DESC<m>; struct n {}; typedef n (*m)(const n*, const n*);
<geordi> pointer to a function taking 2 pointers to constant ns and returning a n
Run Code Online (Sandbox Code Playgroud)

通过移动*,您不再将其应用于函数类型的返回类型,而是应用于函数类型本身.

在C++ 11中,除非您迫切需要高效率的呼叫,否则请坚持以下内容,以满足对Cthulhu的热爱!:-)

typedef std::function<n*(const n*, const n*)> m;
Run Code Online (Sandbox Code Playgroud)

如果你想坚持使用函数指针,那么你可以:

using m = n*(const n*, const n*);
Run Code Online (Sandbox Code Playgroud)

在此之前,您可以使用boost::function或学习可怕的C声明器规则.你确实应该了解它们; 它只是希望你不会过于频繁地使用它们.

  • 或者更好:`使用m = n*(const n*,const n*);` (3认同)
  • @MattHolmes:事情并非那么简单.例如,考虑到RHEL发行版附带的GCC版本相当陈旧,远远超过C++ 11.许多软件和客户商店*要求*使用随发行版提供的工具链.在假设所有不分享*你的*信念为"grognards"的人之前,试着看一下大局. (2认同)

Joh*_*ing 5

第一个typedef为一个函数创建一个别名,该函数接受2个参数并返回指向的指针n.

第二个typedef为指向函数的指针创建一个别名,该别名接受2个参数并返回n by值.