[英]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 的D3DKMTEnumAdapters2
, NumAdapers
成员本身似乎也发生了变化(可能):
当 D3DKMT_ENUMADAPTERS2::pAdapters 为 null 时,D3DKMT_ENUMADAPTERS2::NumAdapters 设置为支持的最大适配器数。 被调用方通常会首先调用该方法来检索支持的最大适配器数。
因此,根据该段,当使用传递(指向)结构的pAdapters
成员的NULL
值调用 function 时,将违反const
属性。
请注意,链接的文档还暗示NumAdapters
成员已修改,即使给出了非空的pAdapters
值(强调我的):
调用者传入数组大小和空数组空间。 Callee 验证数组中有足够的空间,填充数组,然后传回使用了多少数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.