接受C / C ++数组类型的函数

时间:2009-09-03 08:42:24

标签: c++ strong-typing

似乎g ++在将数组作为参数传递时忽略了数组大小的差异。即,即使使用-Wall,以下编译也没有警告。

void getarray(int a[500])
{
    a[0] = 1;
}

int main()
{
    int aaa[100];
    getarray(aaa);
}

现在,我理解传递指针的基础模型,显然我可以将函数定义为getarray(int *a)。但是,我预计,当我明确指定数组大小时,gcc至少会发出警告。

有没有办法解决这个限制? (我的guest boost :: array是一个解决方案,但我有很多旧代码使用c-style数组,它被提升为C ++ ...)

2 个答案:

答案 0 :(得分:10)

数组作为指向第一个参数的指针传递。如果大小很重要,则必须将函数声明为void getarray(int (&a)[500]);

C idiom是传递数组的大小,如下所示:void getarray(int a [],int size);
C ++习惯用法是最近使用std :: vector(或std :: tr1 :: array)。

答案 1 :(得分:3)

我是第二个what rpg said。但是,如果您想使用任何大小的数组调用该函数,您可以使用模板来执行此操作:

template< std::size_t N>
void getarray(int (&a)[N])