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

C++ 接受C/C+的函数+;数组类型,c++,strong-typing,C++,Strong Typing,在将数组作为参数传递时,g++似乎忽略了数组大小的差异。即,即使使用-Wall,以下编译也不会出现警告 void getarray(int a[500]) { a[0] = 1; } int main() { int aaa[100]; getarray(aaa); } 现在,我理解了传递指针的底层模型,显然我可以将函数定义为getarray(int*a)。然而,当我明确指定数组大小时,我希望gcc至少会发出警告 有没有办法绕过这个限制?(我的Boost Boo::数

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

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

int main()
{
    int aaa[100];
    getarray(aaa);
}
现在,我理解了传递指针的底层模型,显然我可以将函数定义为
getarray(int*a)
。然而,当我明确指定数组大小时,我希望gcc至少会发出警告


有没有办法绕过这个限制?(我的Boost Boo::数组是一个解决方案,但是我有很多旧代码使用C样式数组,它被提升到C++……)

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

C习惯用法是这样传递数组的大小:void getarray(inta[],intsize)
C++习语是使用STD::vector(或者STD::Tr1::最近数组)。但是,如果要使用任意大小的数组调用函数,可以使用模板执行此操作:

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

使用int a[500]只传递指向int的指针。使用int(&a)[500]传递对500个元素数组的引用。它们是不同的类型,编译器会发现不匹配。顺便说一下,通过使用int(&a)[500],您不能再传递分配了新int[500]的数组了!伟大的一种有用的技术。据我所知,实际生成的代码是相同的。+1,这可能是一种有用的方法,但请注意,您不能再使用普通的
int*
调用此函数了@j_random_hacker:我实际上认为这是一个优势。重复:@Richard:这个问题的答案包含了这个问题的线索。但问题不同。这是关于类型保存的。