如何将特定大小的数组作为参数传递?
How to pass specificly sized array as argument?
我有一个函数,可以生成带有错误处理的安全输入,因此输入数字(int(更清晰。但是我希望其中一个参数是长度为 2 的可选数组,其中包含所需变量输入的边界。
这是我现在所拥有的:
//function prototype
void input_number(int* variable, string text = "Input : ", int boundaries[2] = NULL);
//function call
int variable;
input_number(&variable, "Choose a number between 0 and 10 : ", {0, 10});
这不起作用,抛出错误cannot convert '<brace-enclosed initializer list>' to 'int*' for argument '3' to 'void input_number(int*, std::__cxx11::string, int*)'
如何将长度为 2 的数组传递给函数?
另外,默认数组值int[] = NULL
正确还是我完全错了?
错误消息解释了这个问题 - 当数组作为参数传递给函数时,数组被转换为指针(指向第一个元素(。
一种解决方案是传递具有两个成员的struct
类型,并为其指定默认值。 一个例子是,因为std::array
实际上是一个模板化结构
void input_number(int* variable, std::string text = "Input : ", const std::array<int, 2> &bounds = {});
int variable;
input_number(&variable, "Choose a number between 0 and 10 : ", {0, 10});
但是,任何可以存储两个值并使用initializer_list<int>
构造的数据结构。 标准库中还有其他此类类型的例子 -std::array
不是唯一的。
就个人而言,我也会省略第一个参数,并将其作为返回值
int input_number(std::string text = "Input : ", const std::array<int, 2> &bounds = {});
// to call
int variable = input_number("Choose a number between 0 and 10 : ", {0, 10});
这有一个函数无法报告错误(除了抛出异常(的问题,但你的方法也是如此。
就个人而言,我也不会将边界作为默认参数传递。 我只是用函数重载来做;
int input_number(std::string input, int lower_bound, int upper_bound)
{
// do whatever you want
}
int input_number(std::string input)
{
return input_number(input, std::numeric_limits<int>::min(), std::numeric_limits<int>::max());
}
这迫使调用方在第一个参数(在这种情况下,使用默认边界(或两个参数(指定边界(之后不提供参数 - 仅传递一个额外的参数将是一个可诊断的错误。 与你所问的唯一区别是,这不需要(隐式或显式地(构造数组或其他数据结构来调用函数 - 这可以说是调用者更容易处理的。
试试这个:
void input_number(int* variable, string text = "Input : ", std::array<int, 2> boundaries = {});
- 堆栈和队列是否像C++中的数组一样传递?
- C++函数模板需要 &for 数组参数
- 如何正确使用 fstream 并在 char 数组中传递数据?
- 使用IPC/共享内存将Integer数组从C++传递到Python
- 将数组正确传递给函数 C++
- 将动态数组/矩阵传递给函数进行初始化
- 如何将结构数组从 c++ 传递到 c#?
- 将字节数组从 C++ 传递到 Python
- 2D数组值像数组一样传递,0不打印
- std::string 参数是如何从原始字符数组文本传递的
- C++ 数组参数不起作用
- 使用 C++/CLI 包装器将 2D 数组从 C# 传递到非托管C++
- 使用数组参数进行函数专用化
- 将 2d 数组从 c++ 传递到 qml
- 为什么我的数组参数的方法无法正常工作?(C )
- 使用SWIG Directors将数组从C 传递到Java
- 将数组指针传递到函数时出错
- pthread_create将动态矢量数组中传递到参数中
- C++将数组参数传递给函数
- 通过引用传递数组参数