在将数组作为参数传递时,似乎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++ ...)
数组作为指向其第一个参数的指针传递.如果大小很重要,则必须将该函数声明为void getarray(int (&a)[500]);
C语言是传递数组的大小,如下所示:void getarray(int a [],int size);
C++习惯用法是最近使用std :: vector(或std :: tr1 :: array).