当从不同类型的外部库中阅读有关函数的文档时,我总是看到文档声明变量必须是 [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/