c++在值形参中返回数据

c++ return data in a value parameter?

本文关键字:返回 数据 形参 c++      更新时间:2023-10-16

我正在努力理解

void getval(const int record, int32* val, bool allowExc) const;

void getval(const int record, vector<int32>* value, bool allowExc) const;

我需要返回int32的列表。第一个例子能返回一个ints32的列表还是只返回一个?

这两个函数都有3个参数,不返回值,并且不修改它们所关联的对象。区别在于第二个参数

第一个函数接受一个指向int32的指针(可能是,但不一定是32位有符号整数)。这可以是指向int32值数组的第一个元素的指针,也可以是指向单个值的指针。该值可通过函数修改。

第二个函数接受指向int32向量的指针。这是一个数组,因为它是非const形参,所以函数可以(小心地)修改vector。与普通指针相比,vector的众多优点之一是可以知道vector中有多少元素,但函数无法知道与该指针相关联的数组中有多少元素,除非另外两个形参之一指明了元素的大小。


更新问题:

我需要返回int32的列表。第一个例子能返回一个ints32的列表还是只返回一个?

第一个函数可以给调用者分配的内存赋值,但不能有效地分配内存并将其传递给调用者。如果调用者传入一个指向int32值列表(数组)的指针,那么函数可以覆盖该列表;它(不言而喻)不知道这个列表有多大。

第二个函数获取指向int32值向量的指针。该函数可以为指针赋值一个新的向量,这就留下了如何释放(或泄露)前一个值的问题。它也可以简单地修改向量,但在这种情况下,引用会更容易理解。vector将负责内存管理。

int32* vector<int32>* 差异明显。虽然两者做的事情基本相同,但你应该知道int32*是一种基本数据类型(指向int32数组的指针),而vector是STL(标准模板库)类,在这种情况下保存int32数组,同时提供更多选项,如:

  • 越界检查([]operator)
  • 矢量的大小(大小函数)
  • 矢量的最大容量(容量函数)
  • 在需要时保留更多字节的方法(保留函数)

对于原始数据类型,您没有任何这些。

所有关于矢量模板类的信息都可以在它的帮助页面找到。

第一个函数的val形参是指向int32类型的单个指针,而第二个函数的value形参是指向int32类型向量的指针。

vector是一个STL容器类。在您的示例中,它是int32指针和指向int32 s的向量的指针之间的区别。

更多信息,我建议你阅读http://www.cplusplus.com/reference/stl/vector/.

有时,参数用于返回值。在本例中,val是指向int32的指针,因此我们可以写入*val并在那里留下一个值。对于value,我们可以设置为value->push_back(an int32 value)(*value)[0] = an int32 value

只是想知道,为什么不使用向量作为引用参数(即vector<int32>& value)?