我是 C++ 新手,所以我想知道如何将数组作为参数传递给我自己创建的类型的函数。到目前为止,我一直使用 C#、C 和 Java。
在 C# 中我可以这样做:
// my custom type
public class Foo
{
public int ID;
public string SomeValue;
}
// another class
private void ProcessArray(int arraySize, Foo[] myArray, int someOtherValue)
{
// do whatever
}
但是当我在 C++ 中尝试相同的操作时,我的代码编辑器抱怨该参数。此外,当我使用数组作为第一个参数时,所有其他参数都不能再使用,因为它们被认为是错误的一部分。根据我的代码编辑器,我在传递数组的地方预计会出现“)”。 即使当我尝试使用指针而不是数组时,我也会收到错误。我已经检查过 C++ 和 C 处理数组和指针是否或多或少相同。意思是,数组可以用指针代替。由于 C++ 的工作方式与 C 相同,因此我尝试了以下方法:
void processArray(int arraySize, Foo* myArray, int someOtherValue){
// some code here
}
还是不行。我究竟做错了什么?或者C++不支持数组作为函数参数?感谢您的帮助。顺便提一句。我正在使用 Visual Studio Code 进行编辑。
C++ 支持多种数组类型,包括语言和库定义的数组类型。 看看下面的演示:
#include <iostream>
#include <vector>
#include <array>
#include <span>
struct Foo {
int data = 0;
};
void fun1(std::span<Foo> s)
{
std::cout << "with span\n";
}
void fun2(Foo (&ar)[3])
{
std::cout << "with ar\n";
}
void fun3(Foo *ar)
{
std::cout << "with decay to pointer\n";
}
int main ()
{
Foo ar[] = {Foo{}, Foo{}, Foo{}};
std::array<Foo,3> stdArray{ar[0], ar[1], ar[2]};
std::vector vArray(std::begin(ar), std::end(ar));
fun1(ar);
fun1(stdArray);
fun1(vArray);
fun2(ar);
//fun2(stdArray); // error cannot convert std::array to language level array.
//fun2(vArray); // error cannot convert vector to language array.
fun3(ar);
fun3(stdArray.data());
fun3(vArray.data());
}
所以基本上你可以有:
Foo ar[] = ...
std::array<Foo, 3>
std::vector
根据您的选择,请记住:
std::span
的参数始终可以封装您的数组。而且使用起来更安全(&ar)[N]
参数可以接受 N
元素数组