C++禁用函数数组的基本原理?

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)

Dút*_*has 5

鉴于我刚刚编写的两个随机函数:

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因为它没有提供优于指针或函数的引用,但有很多缺点.

  • 我认为这是第一次有人说**简单**是最重要的C++设计目标之一. (3认同)