2

似乎 g++ 在将数组作为参数传递时忽略了数组大小的差异。即,即使使用-Wall.

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

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

现在,我了解了传递指针的底层模型,显然我可以将函数定义为getarray(int *a). 但是,我希望 gcc 在我明确指定数组大小时至少会发出警告。

有没有办法绕过这个限制?(我来宾 boost::array 是一种解决方案,但我有很多使用 c 样式数组的旧代码,这些代码被提升为 C++……)

4

2 回答 2

10

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

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

于 2009-09-03T08:45:51.800 回答
3

支持 rpg 所说的。但是,如果您想使用任何大小的数组调用函数,您可以使用模板来执行此操作:

template< std::size_t N>
void getarray(int (&a)[N])
于 2009-09-03T08:53:02.393 回答