[英]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.