括号内的单个星号"(*)" C++做什么?

What does the single asterisk inside parentheses "(*)" do in C++?

本文关键字:C++ 什么 单个星      更新时间:2023-10-16

我找到了这样的代码:

typedef std::map<std::string, Example*(*)()> map_type;

和搜索了一段时间后,我仍然不能弄清楚(*)操作符到底是做什么的。有人有什么想法吗?

这里的父级用于施加优先级。

类型
Example*(*)()

是指向函数的指针,返回指向Example的指针。

如果没有父元素,就会有

Example**()

返回指向Example的指针的函数

这是用于声明指向函数(您的例子)或数组的指针的语法。用声明

typedef Example* (*myFunctionType)();

这将使行变成

typedef std::map<std::string, myFunctionType> map_type;

完全等价于你给出的行。注意,Example* (*myFunctionType)()Example* (*)()的区别只是省略了类型的名称。

这是一个函数指针声明。

这个 typepedef 表示std::map将字符串映射到函数指针,接收void并返回Example*

你可以这样使用:

#include <string>
#include <map>
typedef  int Example;
Example* myExampleFunc() {
    return new Example[10];
};
typedef std::map<std::string, Example*(*)()> map_type;
int main() {
    map_type myMap;
    // initializing
    myMap["key"] = myExampleFunc;
    // calling myExampleFunc
    Example *example = myMap["key"]();
    return 0;
}

在c++ 11中,由于使用了模板typedefs,可以使复杂的指针类型更容易理解:

template<typename T> using ptr = T*;
typedef std::map<std::string, ptr<Example*()>> map_type;