数组可以作为指针传递给函数,甚至可以作为引用传递。将其作为引用传递会得到一个别名,sizeof和count运算符也将在其上工作。这使得按引用传递看起来更加优秀。
然而,在书中,按指针传递似乎是常态。为什么?有没有关于数组按引用传递需要特别了解的事情?
数组可以作为指针传递给函数,甚至可以作为引用传递。将其作为引用传递会得到一个别名,sizeof和count运算符也将在其上工作。这使得按引用传递看起来更加优秀。
然而,在书中,按指针传递似乎是常态。为什么?有没有关于数组按引用传递需要特别了解的事情?
按引用传递意味着您的函数只能接受固定大小的数组(这就是为什么它知道它们的大小,因为编译器强制执行)。而通过指针传递则不同。此外,通过指针传递可以让您传递 nullptr
,好坏参半。
std::vector
并喜欢通过 const 引用传递。但是,如果我的 API 可能会被 C 代码调用,则使用通过 const 指针传递可能是有意义的,尽管您还需要发送大小。如果函数可能被调用时使用 std::array
或 std::vector
,则可以决定发送指针(和大小)或一组迭代器(begin/end)。void myfunc( const std::array<int, 5>& mydata ){...}
template<unsigned int SZ>
void myfunc(const std::array<int, SZ>& mydata) {...}
void f(int (&arg)[5]);
void g() {f(*new int[1][5]);}
- Todd Flemingnew
返回指向最外层数组的第一个元素的指针;这会丢失一些(而不是全部)大小信息。 - Todd Fleming