gpt4 book ai didi

c++ - 什么是 typedef cell (*proc_type)(const std::vector &);做?

转载 作者:行者123 更新时间:2023-11-27 23:12:26 28 4
gpt4 key购买 nike

我在看 this post当我看到这条线时。

简而言之,代码如下所示:

struct cell {
typedef cell (*proc_type)(const std::vector<cell> &);
typedef std::vector<cell>::const_iterator iter;
typedef std::map<std::string, cell> map;
cell_type type;
std::string val;
std::vector<cell> list;
proc_type proc;
environment * env;
cell(cell_type type = Symbol) : type(type), env(0) {}
cell(cell_type type, const std::string & val) : type(type), val(val), env(0) {}
cell(proc_type proc) : type(Proc), proc(proc), env(0) {}
};

那么 typedef cell (*proc_type)(const std::vector &); 是什么意思?做什么?
typedef 应该像

typedef (existing) (new)

既然我们可以使用 cell 代替,为什么还要声明如此复杂的新类型呢?

最佳答案

您断言“typedef 应该像 typedef (existing) (new) 一样使用”是完全错误的。不,一般情况下不会那样使用。只有最基本的 typedef 声明可能遵循该格式。

C(或C++)中typedef声明的语法是基于普通声明的语法。事实上,它与 typedef 的语法完全相同。关键字添加到它。在这些语言中,声明不能像您在您的案例中尝试做的那样清楚地分为两部分。声明语法要复杂得多。声明的名称通常位于描述该名称类型的标记的中间。

举个简单的例子,一个名为 a 的对象的声明数组类型 int [10]将如下所示

int a[10];

它包含名称左侧 ( int ) 和名称右侧 ( [10] ) 的部分。类似地,在 typedef 声明中,描述类型的标记可以(并且将)位于新类型名称的左侧和右侧。在你的例子中

typedef cell (*proc_type)(const std::vector<cell> &);

新名称proc_type正在声明,而两侧围绕它的所有内容实际上都描述了类型 cell (*)(const std::vector<cell> &)这个新的 typedef 名称将代表。它是一个指针类型:一个指向接收const std::vector<cell> &的函数的指针参数并返回 cell值(value)。

关于c++ - 什么是 typedef cell (*proc_type)(const std::vector<cell> &);做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19308615/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com