是一个常量句柄真的常量

Is a const HANDLE really const?

本文关键字:常量 句柄 真的 一个      更新时间:2023-10-16

据我所知,HANDLE只是一个数字,指的是某种"系统资源表"。这个句柄常量正确吗?我想不是因为它只是用于访问像数组上的索引这样的表。位图示例:如果 HBITMAP 声明为 const,是否可以更改位图的内容?

HANDLE 是 (AFAIR) int 的 typedef,因此 const HBITMAP 与 const int 相同。

从这个意义上说,即使位图的句柄是 const,您也可以更改位图的内容,因为 const 引用句柄而不是实际位图(将其视为指向变量类的 const 指针)。

但:

无论如何,您的问题都没有实际意义,因为:

  • 句柄是 Win32 API 的一项功能,它是一个 C API 而不是C++(并且在 C 获得 const 之前创建)。
  • 无论如何,您都不能直接更改位图(或由句柄表示的任何其他"对象")。句柄是对 Win32 结构的不透明引用,只能通过用于处理(无双关语)"对象"的相应 Win32 API 调用进行操作。

我将"对象"放在引号中,因为句柄指的是概念对象(概念的软件表示形式),而不是实际的C++对象,同样是因为 Win32 是 C API。