phi*_*uru -3 c++ language-lawyer
C++不允许定义函数类型数组的基本原理(技术或概念)是什么?例如
using fn_t = int(int);
fn_t ary[2]; // ERROR (ref: ISO/IEC-14882 [dcl.array])
Run Code Online (Sandbox Code Playgroud)
鉴于我刚刚编写的两个随机函数:
int a( int x, int y )
{
return x * y;
}
int b( int x, int y )
{
int result = 0;
for (int xi = 1; xi <= x; xi++)
for (int yi = y; yi > 0; yi--)
result += xi * xi;
return result;
}
Run Code Online (Sandbox Code Playgroud)
你怎么建议我把它们放在一个数组中?
我想,我可以编译它们,然后只有一个max(sizeof(a的字节码),sizeof(b的字节码))数组.但现在我还有一些额外的考虑因素:
这个阵列在哪里?
某些处理器可以从内存中的任何位置运行代码 有些人不能.
那么代码的安全属性呢?
搬迁考虑怎么样?
我该如何调用此功能?
我可以使用处理器的常用调用约定吗?或者这需要额外的幕后魔术吗?
当我想要一个指向数组的指针时会发生什么?
如果我移动数组然后调用指针会发生什么?
异常和其他异常信号考虑因素如何?
这只是冰山一角.有很多的技术考虑到做这种事情.
这导致了主要考虑因素:
这会给函数指针带来什么好处?
使用指向函数的指针,我可以做我想做的所有事情:
int (*fs)(int,int)[] = { a, b };
int x = fs[0]( 10, 10 );
int y = fs[1]( 10, 10 );
Run Code Online (Sandbox Code Playgroud)
该语言设计有多个目标 - 最重要的两个目标是简单性和灵活性.
做你想做的事情会降低每个人的简单性和灵活性:编译器编写者,编译器本身,运行时管理,速度,安全性等.
编辑: tl; dr因为它没有提供优于指针或函数的引用,但有很多缺点.