C++ 为什么C++;禁止声明没有类型的参数?

C++ 为什么C++;禁止声明没有类型的参数?,c++,arrays,types,ambiguity,C++,Arrays,Types,Ambiguity,我希望使用以下方法作为任何数组的通用方法 int arrayLength(`anyType` array[]) { return sizeof(array) / sizeof(array[0]); } 但是C++似乎不允许任何类型的歧义, 这是为什么?我应该如何处理它呢?因为类型必须被推到堆栈上,然后弹出,并且sizeof一种类型不等于sizeof另一种类型 如果函数之间在堆栈上传递的类型的大小不是固定的或事先不知道的,编译器如何编译函数 正如其他人所指出的,这个问题的解决方案是模板和

我希望使用以下方法作为任何数组的通用方法

int arrayLength(`anyType` array[])
{
    return sizeof(array) / sizeof(array[0]);
}

但是C++似乎不允许任何类型的歧义,


这是为什么?我应该如何处理它呢?

因为类型必须被推到堆栈上,然后弹出,并且
sizeof
一种类型不等于
sizeof
另一种类型

如果函数之间在堆栈上传递的类型的大小不是固定的或事先不知道的,编译器如何编译函数


正如其他人所指出的,这个问题的解决方案是模板和宏,它们都会在编译时动态生成代码,然后再编译代码,似乎“解决”了这个问题,但是,实际上只通过将工作卸载到编译器中来消除或分散它。VisualC++中的<代码> >子计数(<)/Cuth>构造也同样如此。它是作为C++编译的模板实现的,作为C++的宏。C++的版本错误如果在指针上使用(与真正的数组相反),C版本就不会。

我想你真正想问的是“C++为什么坚持静态类型?” 答案是:如果语言使用静态类型,那么编写生成小型、快速程序的编译器就更容易了。这就是C++的目的:创建小型、快速的程序,如果用C编写,其复杂性将相对难以管理


当我说“小”时,我包括了所有必需的运行时库的大小。

模板std::size\t arraylelength(t(&)[N]){return N;}
replicate:另一个相关线程:@ilgjarn您是否可以完整地向我解释您的代码,也就是说,把它拼出来,就像我是一个完全的傻瓜一样,因为我真的很想了解它所做的一切,Thanks@Sebastian当前位置在我看来,您链接到的答案中似乎有详细的解释。