c++在值形参中返回数据
c++ return data in a value parameter?
我正在努力理解
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
)?
- 为什么我们使用在C++中返回数据结构的函数?
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- FFmpeg av_read_frame从音频流返回数据包
- 扩展 QStandardItem 不会返回数据
- C++ 根据给定的类型名从变量返回数据
- YAML-CPP的顺序返回数据
- 从全局 CUDA 函数返回数据
- C++ ostream 从对象数组返回数据
- 现代C++.从继续执行的工作线程返回数据结构
- 使用 JNI 通过从C++到 Java 的指针返回数据
- 为什么返回数据结构而不是指针弄乱了我的数据的完整性
- C++Curl,如何读取返回数据
- WSARecv()能否立即返回数据
- 处理 char * 的正确方法在 swig/python 中返回数据
- 如何使用 cppunit 断言宏来检查返回数据类型的预处理器值
- C++函数,不返回返回数据
- 通过.NET中的指针从本机方法返回数据
- 从if语句返回数据
- 更快地以数组形式返回数据的c++接口
- 模板,在派生类中返回数据的通用方法