gpt4 book ai didi

c++ - 声明类型为 void C++ 的函数数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:50 25 4
gpt4 key购买 nike

我有几个返回 void 的函数。我指向这些函数并希望得到这些函数的数组:

为什么这段代码有效:

#include <cstdio>
using std::puts;

void tell() {
puts("hi");
};

void slap() {
puts("goodbye");
}

int main(int argc, char *argv[])
{

void (*tp)() = tell;
void (*sp)() = slap;

void(*funcs[])() = {tp, sp};
for (auto point:funcs) {
point();
}
return 0;
}

当我在 funcs 中指定指针的情况下尝试此代码时(即 void(funcs[])() = {tp, sp}; 我得到了 “错误:'funcs' 声明为类型为'void ()' 的函数数组” 这正是它们的本质 - 那么为什么会出现错误?

我也不明白语法,void(*funcs[])() 末尾的 () 不是表示实际调用函数吗?

最佳答案

C++ 标准 8.3.5/10 说:

There shall be no arrays of functions, although there can be arrays of pointers to functions.

funcs”的声明必须使用“螺旋法则”阅读:

funcs[] : funcs是一个数组

*funcs[] : funcs是一个指针数组

(*funcs[])() : funcs是指向没有参数的函数的指针数组

void (*funcs[])() : funcs是指向函数的指针数组,没有参数返回 void .

关于c++ - 声明类型为 void C++ 的函数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31643245/

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