C++ 知道争论有多大吗
假设我正在向如下函数传递一个参数:C++ 知道争论有多大吗,c++,pass-by-reference,C++,Pass By Reference,假设我正在向如下函数传递一个参数: void myFunc( int* arrayOfInts ); 从函数不知道int数组的大小的角度来看,这似乎不安全。我可以放一条评论说“这个函数假设它得到一个10整数的数组”,但是不可能检查它。因此,该函数的错误使用会导致神秘的“分段错误”。有更好的方法吗?同时传递数组的大小,C样式: void myFunc(int* arrayOfInts, int arraySize); 或在数组结束后传入指向的指针,迭代器样式: void myFunc(int*
void myFunc( int* arrayOfInts );
从函数不知道int数组的大小的角度来看,这似乎不安全。我可以放一条评论说“这个函数假设它得到一个10整数的数组”,但是不可能检查它。因此,该函数的错误使用会导致神秘的“分段错误”。有更好的方法吗?同时传递数组的大小,C样式:
void myFunc(int* arrayOfInts, int arraySize);
或在数组结束后传入指向的指针,迭代器样式:
void myFunc(int* begin, int* end);
或者传入一个std::vector
或等效文件,完全避开问题:
void myFunc(const std::vector<int>& vec);
void myFunc(const std::vector&vec);
在C/C++中,当处理原始数组时,函数通常要求你也像数组一样传递数组的大小,比如
void foo(int *arr, size_t size_);
<>但是在C++中,为什么不使用<代码> STD::向量< /代码>?它是安全的。考虑使用第二个指示大小的参数,或者更好地使用std::vector
,该参数将允许您在函数中查询大小传递大小,或者最好使用std::vector
使用模板函数
template <int N>
void fmyFunc(int (& array)[N])
{
}
您可以通过引用数组来获取参数,并将数组的大小设置为模板参数N
:
template <int N>
void myFunc(int (&arrayOfInts)[N])
{
// here we know the size is N
}
直接C++回答是使用<代码> STD::向量< /代码> .<
传统的C/C++答案是接受数组大小作为参数
第三个答案是C++特有的:您可以使用专门用于数组大小的函数模板。这并不意味着你应该这样做。有关详细信息,请参阅接受的答案。正如其他人所说,添加一个数组大小的参数。这样做的原因是,您可以为不同大小的数组编写一个函数。编写计算数组大小的模板函数的方法意味着,对于传递给模板的每个数组大小,都有一个不同的函数。而且,是的,向量
有自己的大小,但这样做会增加开销。有时候最简单的就是最好的
void fmyFunc(int* arrayOfInts, int size)
{
}
template <int N>
void myFunc(int (&arrayOfInts)[N])
{
// here we know the size is N
}
void myFunc(int (&arrayOfExactlyThreeInts)[3])
{
}