根据http://en.cppreference.com/w/cpp/language/type,未知边界的数组是不完整的类型,函数定义只允许使用完整类型的参数。
好吧,请考虑以下代码:
#include <iostream>
using namespace std;
void f(int t[])
{
cout << t[2] << endl;
}
int main()
{
int tab[5] = {1,2,3,4,5};
f(tab);
}
据我了解,int t[]
是一个未知界限的数组。因此,在函数f
的定义中不应出现此类型的参数,并且上述代码应该是非法的。
然而,clang http://melpon.org/wandbox/permlink/IqOXuXBqIsJSJLOr和gcc http://melpon.org/wandbox/permlink/8TKWq3UTP5sNC8rJ都接受此代码。为什么呢?
答案 0 :(得分:2)
调整参数类型的通常规则也适用于未知边界的数组。因此,该声明实际上使f
函数采用int*
类型的参数,而不是int[]
。 int*
是一个完整的类型。