【发布时间】:2015-12-16 19:56:51
【问题描述】:
根据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 都接受此代码。为什么?
【问题讨论】:
-
Nitpick:您传递的是完整类型的参数。你问的是参数,而不是参数。
-
@chris 我想知道这是挑剔还是我的问题的答案...... cppreference.com 的确切引用:“以下任何上下文都需要类 T 是完整的:(。 ..) * 定义或函数调用返回类型为 T 或参数类型为 T 的函数;(...)"
-
一个函数定义,就像你有的,要求它的参数是完整的。声明没有。实际答案是真的变成了指针,指针是完整的类型。
标签: c++ arguments incomplete-type