为什么我可以将不完整类型的参数传递给函数?

时间:2015-12-16 19:56:52

标签: c++ arguments incomplete-type

根据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都接受此代码。为什么呢?

1 个答案:

答案 0 :(得分:2)

调整参数类型的通常规则也适用于未知边界的数组。因此,该声明实际上使f函数采用int*类型的参数,而不是int[]int*是一个完整的类型。

相关问题