C++ func指针的常量数组令人困惑
为什么这个不能编译?我希望const引用数组,而不是数组的内容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 ); 编辑:所以你们说它不存在。很公平。为了清楚起见,我将此功能与我想要的功能进行类比,但这是使
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
}