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

时间:2012-01-23 21:23:38

标签: c++ arrays types ambiguity

我想将以下方法作为任何数组的通用方法

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

然而,似乎C ++根本不允许任何类型的歧义,

为什么会这样,我该如何绕过它呢?

3 个答案:

答案 0 :(得分:3)

因为类型必须被压入堆栈然后再弹出,sizeof一种类型不等于sizeof另一种类型。

如果函数之间在堆栈上传递的类型的大小未被修复或事先知道,编译器如何编译函数?

这个问题的解决方案 - 正如其他人所指出的那样 - 是模板和宏,它们都在编译时动态生成代码 - 然后编译 - 然后出现在“解决“问题,但实际上只是通过将工作卸载到编译器上来避免或分散您的注意力。

答案 1 :(得分:1)

在Visual C ++中,有一个__countof()构造也是如此。它被实现为C ++编译的模板和C的宏。如果在指针上使用C ++版本错误(而不是真正的数组),C版本不会。

答案 2 :(得分:1)

我认为你真正要问的是“为什么C ++坚持静态打字?”

答案:因为如果语言使用静态类型,编写生成小型快速程序的编译器会更容易。这就是C ++的目的:创建小型,快速的程序,如果用C语言编写,其复杂性将相对难以管理。

当我说“小”时,我会包含任何所需运行时库的大小。