C++ func指针的常量数组令人困惑

C++ func指针的常量数组令人困惑,c++,arrays,C++,Arrays,为什么这个不能编译?我希望const引用数组,而不是数组的内容 void process( int boat ) { ; } const void(*sequence_A[])( int ) = { process, process }; //ERROR const void(**func_sequence)( int ) = sequence_A; (*func_sequence++)( 7 ); 编辑:所以你们说它不存在。很公平。为了清楚起见,我将此功能与我想要的功能进行类比,但这是使

为什么这个不能编译?我希望const引用数组,而不是数组的内容

void process( int boat ) { ; }

const void(*sequence_A[])( int ) = { process, process }; //ERROR
const void(**func_sequence)( int ) = sequence_A;

(*func_sequence++)( 7 );
编辑:所以你们说它不存在。很公平。为了清楚起见,我将此功能与我想要的功能进行类比,但这是使用int而不是函数ptrs

Error   1   error C2440: 'initializing' : cannot convert from 'void (__cdecl *)(int)' to 'const void (__cdecl *)(int)'

好的,让我们来分析一下你陈述的意思

我记得解析
*x[]
的方式是
main
的第二个参数是
char*argv[]
,因此,它是一个指针数组。换句话说,
sequence\u A
将被索引,然后结果将被取消引用

然后,您可以应用一个带有
int
值的函数调用参数括号,结果应该是

const void

这并不完全有意义。您可以有一个指向
const void
的指针,但不能取消引用该指针:您不能直接“获取”const void。然而,这里有一个指向函数的指针,该函数生成一个
const void
作为其表达式值

要匹配您需要的

 const void(*sequence_A[])( int ) = { process, process }; //ERROR
虽然我还没有尝试过,但我怀疑是否有编译器会接受它。[更新:事实证明,至少g++接受它,因此这是一个解决方案。但它是一个非常非传统的函数签名。而且根本不是您想要的!]

简而言之,删除该
const


在相关注释中,如注释中所述,除了
const
项的原始数组外,不能有
const
原始数组

这是该语言的一个特例,是从C语言继承下来的一个有问题的类型系统异常

随着数组类型衰减到指针,也有问题


附录:如何使数组项常量的示例:

const void process( int boat ) { ; }

不幸的是,没有所谓的
const
数组,除了
const
项数组之外。好吧,这个功能是任意不可用的。我不知道是不是这样。
const void process( int boat ) { ; }
void process( int boat ) { ; }

int main()
{
    void(* const sequence_A[])( int ) = { process, process };   // OK
    //sequence_A[0] = process;     //ERROR
}