繁体   English   中英

“_inout”参数可以是“const”“吗?

[英]can an "_inout" parameter be "const" "?

我的理解是,如果指针指向读取和写入的内容,即“ inout ”,那么根据定义它不能是“const”(因为“out”),但是 C 标头中有原型指定参数为“ inout const”,这对我来说没有意义。 例如:

EXTERN_C _Check_return_ NTSTATUS APIENTRY D3DKMTEnumAdapters2(_Inout_ CONST D3DKMT_ENUMADAPTERS2*);

正如我上面提到的,鉴于参数也是“out”,我看不出参数如何成为“const”。

我是不是误解了什么或者这个定义不正确?

谢谢您的帮助。

`

理论上,当参数是指向结构的指针时,没有什么可以阻止声明为_Inout_的参数具有const限定符。

例如,调用D3DKMTEnumAdapters2的参数是指向D3DKMT_ENUMADAPTERS2结构的指针,其定义如下:

typedef struct _D3DKMT_ENUMADAPTERS2 {
  ULONG              NumAdapters;
  D3DKMT_ADAPTERINFO *pAdapters;
} D3DKMT_ENUMADAPTERS2;

现在,如果pAdapters成员是一个预先分配的D3DKMT_ADAPTERINFO对象数组(大小在NumAdapters成员中指定),并且function 所做的只是用每个适配器的相关信息填充该数据数组,那么传递的结构本身将没有被修改——因此与参数上的const限定符没有冲突。

但是,从 D3DKMTEnumAdapters2 的D3DKMTEnumAdapters2NumAdapers成员本身似乎也发生了变化(可能):

当 D3DKMT_ENUMADAPTERS2::pAdapters 为 null 时,D3DKMT_ENUMADAPTERS2::NumAdapters 设置为支持的最大适配器数。 被调用方通常会首先调用该方法来检索支持的最大适配器数。

因此,根据该段,当使用传递(指向)结构的pAdapters成员的NULL值调用 function 时,将违反const属性。


请注意,链接的文档还暗示NumAdapters成员已修改,即使给出了非空的pAdapters值(强调我的):

调用者传入数组大小和空数组空间。 Callee 验证数组中有足够的空间,填充数组,然后传回使用了多少数组

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM