传递数组作为参考

hyp*_*not 5 c++ arrays stl visual-studio-2010

在C++中,当我在编译时不知道大小时,如何将数组作为引用传递?到目前为止,我发现使其工作的唯一方法是使用类似的东西

const double( &numbers ) [size]
Run Code Online (Sandbox Code Playgroud)

但这意味着我需要在编译时知道数组的大小,因此我无法在外部函数中使用它.

我的问题是:

  1. 如果我没有将数组作为a传递( const double( &numbers ) [length] ),因为例如我不知道它的大小,我如何确保它不会被复制,但它被引用
  2. 如果我传递一个像上面例子中的数组,( double array[] )它是引用还是被复制

Don*_*alo 6

在C++中,您应该使用std :: vector.

在C/C++中,您不能将数组作为副本传递.数组总是通过引用传递.

编辑

在C++中,通过引用传递的数组具有不同的含义.在C和C++中,数组衰减成指向数组第一个元素的指针.请查看以下评论​​.

  • *数组总是通过引用传递*不完全正确,数组衰减成指针,然后该指针按值传递.区别在于类型更改,在函数外部它可以是一个正确的数组(`T [10]`),而在函数内部它将被视为一个指针(`T*`),带有一些差异需要(sizeof`是其中最大的结果) (2认同)

K-b*_*llo 6

其他答案很棒,但没有人提到使用模板来处理这个问题.您仍然应该使您的函数采用指针和大小,但模板可以自动为您填充:

void f( double const numbers[], std::size_t length )
{ ... }

template< std::size_t Length >
void f( double const (&numbers)[ Length ] )
{
    return f( numbers, Length );
}
Run Code Online (Sandbox Code Playgroud)