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])
{
}