我想将以下方法作为任何数组的通用方法
int arrayLength(`anyType` array[])
{
return sizeof(array) / sizeof(array[0]);
}
然而,似乎C ++根本不允许任何类型的歧义,
为什么会这样,我该如何绕过它呢?
答案 0 :(得分:3)
因为类型必须被压入堆栈然后再弹出,sizeof
一种类型不等于sizeof
另一种类型。
如果函数之间在堆栈上传递的类型的大小未被修复或事先知道,编译器如何编译函数?
这个问题的解决方案 - 正如其他人所指出的那样 - 是模板和宏,它们都在编译时动态生成代码 - 然后编译 - 然后出现在“解决“问题,但实际上只是通过将工作卸载到编译器上来避免或分散您的注意力。
答案 1 :(得分:1)
在Visual C ++中,有一个__countof()
构造也是如此。它被实现为C ++编译的模板和C的宏。如果在指针上使用C ++版本错误(而不是真正的数组),C版本不会。
答案 2 :(得分:1)
我认为你真正要问的是“为什么C ++坚持静态打字?”
答案:因为如果语言使用静态类型,编写生成小型快速程序的编译器会更容易。这就是C ++的目的:创建小型,快速的程序,如果用C语言编写,其复杂性将相对难以管理。
当我说“小”时,我会包含任何所需运行时库的大小。