c++ - IN/OUT 参数以及如何在 C++ 中使用它们

标签 c++ parameters

当从不同类型的外部库中阅读有关函数的文档时,我总是看到文档声明变量必须是 [IN/OUT]。有人可以详细了解 [IN/OUT] 与通过引用或值传递的函数参数的关系吗?

这是我遇到的一个函数示例,它告诉我它需要一个 [IN/OUT] 参数:

原型(prototype): ULONG GetActivationState( ULONG * pActivationState );

参数

  • 类型: ULONG*
  • 变量:pActivationState
  • 模式:输入/输出

最佳答案

这部分适用于所有类型的参数 - 大多数库接口(interface)都试图与 C 兼容,因此更常见的是通过指针传递参数,而不是通过引用传递参数。

IN: 当一个参数被列为 IN 时,它是接口(interface)提供的保证,它不会修改该参数。在我看来,通过将参数标记为 const 可以更好地表达这一点,然后语言本身将防止对该值进行修改。如果这个参数是按值传递的,那么它是否在文档中被标记为 IN(或在原型(prototype)中被标记为 const)是无关紧要的,因为这个参数对于函数来说是本地的。但是为了避免复制,它可以通过引用或指针传递,在这种情况下 const 关键字变得非常重要。

OUT: 标记为 OUT 的参数通常表示参数在传递给函数时的值并不重要。事实上,如果它是通过指针传递的,甚至可能要求它为 NULL,函数将分配内存并将值传回给您。

IN/OUT:IN/OUT 参数通常表示输入和输出值都有意义的内容。例如,如果你有一个填充缓冲区的库函数,它可能需要你传递一个指向缓冲区的指针,以及另一个指示缓冲区长度的指针。当函数返回时,第二个指针可能包含已写入缓冲区的实际字节数。

关于c++ - IN/OUT 参数以及如何在 C++ 中使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6900035/

相关文章:

c++ - 使用资源和 ROS (catkin_make) 使用 CMake 编译 Qt 项目

c++ - Qt Creator 中只有有限的工具链

javascript - 定义函数时如何在javascript函数中初始化参数

c++ - 如何保证使用编译时常量初始化堆栈变量

c++ - 使用 BER 编码和解码 ASN.1 REAL

c++ - Qt 自定义窗口

c# - 是否可以更改预定义方法可以在 C# 中采用的参数?

ssh - 如何从 ansible playbook 构建自定义 ssh 连接

java - 如何将参数传递给 Hibernate 的 subselect 标签?

typescript :至少需要一个参数时使用扩展运算符