使用 L = T(*)(T); 的 template<typename T> 中的 (*) 是什么意思?

Mar*_*vić 3 c++ templates function-pointers function c++11

我一直在使用这段代码进行一些测试,我明白它的作用,但我突然想到我不知道(*)在这种情况下应该做什么......

template<typename T>
using L  = T(*)(T);
Run Code Online (Sandbox Code Playgroud)

我试过删除它,没有它代码运行得很好。我认为这可能与指针有关,但我不确定。我使用代码片段来定义传递的 lambda 函数的参数和返回值

son*_*yao 5

是的,它是一个指针类型。T(*)(T)是一个指向函数的指针T(T),它接受T并返回T

没有它,即T(T)是一个函数类型。你说它也有效,因为在许多情况下它可能会衰减为指向函数的指针T(*)(T)。例如,如果定义T(T)为函数参数类型,则将其调整为T(*)(T).

函数类型 T的左值可以隐式转换为指向该函数纯右值 指针

  • @Buffer 是的,没有`(*)``fp`被声明为一个不能像这样初始化的函数。 (2认同)