C ++:将数组引用传递给函数是否正常

时间:2016-02-24 13:58:10

标签: arrays c++11 pass-by-reference

数组可以作为指向函数的指针传递,甚至可以作为引用传递。将其作为参考传递给出了一个别名,其中sizeof和count运算符也将起作用。这使得传递参考看起来更优越。

然而,通过指针似乎是书中的常态。为什么?是否有一些我特别需要知道的关于数组的引用传递?

2 个答案:

答案 0 :(得分:5)

通过引用传递意味着您的函数只能接受固定大小的数组(这就是为什么它知道它们的大小,因为编译器强制执行它)。通过指针传递意味着另外。此外,通过指针传递,您可以传递nullptr,无论好坏。

答案 1 :(得分:1)

我通常使用std::vector并喜欢传递const引用。也就是说,如果我的api可能在某些时候被c代码调用,那么使用pass by const指针可能有意义,尽管你还需要发送大小。如果可以使用std::arraystd::vector调用该函数,则可以决定向下发送指针(和大小)或一组迭代器(开始/结束)。

如果我们讨论使用std :: array,则模板参数需要数组的大小。这意味着在正常功能中,您需要一个固定的大小:

void myfunc( const std::array<int, 5>& mydata ){...}

但是,如果我们做一个模板化的函数,模仿大小,这不再是一个问题。

template<unsigned int SZ>
void myfunc(const std::array<int, SZ>& mydata) {...}

如果我们谈论堆栈分配的c风格数组......好的C ++风格是将std :: array / std :: vector更喜欢c风格的数组。我建议阅读C++ Coding Standard by Herb Sutter第152页第77章,谈论这个问题。使用c风格的数组时,向下发送指针和大小是标准的方法。