簡體   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