接受 C/C++ 的函数数组类型
当将数组作为参数传递时,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++...)
It seems like g++ ignores difference in array sizes when passing arrays as arguments. I.e., the following compiles with no warnings even with -Wall
.
void getarray(int a[500])
{
a[0] = 1;
}
int main()
{
int aaa[100];
getarray(aaa);
}
Now, I understand the underlying model of passing a pointer and obviously I could just define the function as getarray(int *a)
. I expected, however, that gcc will at least issue a warning when I specified the array sizes explicitly.
Is there any way around this limitation? (I guest boost::array is one solution but I have so much old code using c-style array which got promoted to C++...)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
数组作为指向其第一个参数的指针传递。如果大小很重要,则必须将函数声明为
void getarray(int (&a)[500]);
C 习惯用法是传递数组的大小,如下所示: void getarray( int a[], int 大小);
C++ 习惯用法是使用 std::vector (或者最近使用 std::tr1::array )。
Arrays are passed as a pointer to their first argument. If the size is important, you must declare the function as
void getarray(int (&a)[500]);
The C idiom is to pass the size of the array like this: void getarray(int a[], int size);
The C++ idiom is to use std::vector (or std::tr1::array more recently).
我同意rpg 所说的。但是,如果您想使用任意大小的数组调用该函数,您可以使用模板来执行此操作:
I second what rpg said. However, in case you want to call the function with arrays of any size, you could use a template to do that: