首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 雙冒號 (::) 與 NULL 詳細解析:全域函式解析運算子與空指標常數

     編輯:程式設計綜合問答

程式碼語境

::MessageBox(NULL, "沒有該車次!", "登錄錯誤", MB_ICONINFORMATION);

雙冒號 (::) — 全域命名空間解析運算子

作用

強制編譯器從全域命名空間查找後續的名稱,忽略區域/類/命名空間作用域中同名的宣告。

為何此處需要?

  • MessageBox 是 Windows API 全域函式 (定義於 winuser.h)。
  • MFC 的 CWnd 類別也定義了同名成員函式 CWnd::MessageBox。
  • 在 CWnd 衍生類的成員函式內直接寫 MessageBox(...) 會呼叫 CWnd::MessageBox (需 this 指標)。
  • 加上 :: 明確指呼叫全域 API 版本,不需視窗控制碼 (HWND) 即可顯示模態對話框。

NULL — 空指標常數

本質

// C 標準庫定義
#define NULL 0 // 或 (void*)0

// C++11 建議改用 nullptr (強型別)

此處語意

MessageBox 第一個參數為 HWND hWnd (擁有者視窗控制碼)。

  • 傳 NULL (即 0) 表示無擁有者視窗,對話框獨立顯示,不依附任何視窗。
  • 若傳入有效 HWND,對話框會置於該視窗上方,並共享工作列群組。

對照表

呼叫方式解析目標適用場景
MessageBox(...)類成員 CWnd::MessageBox在 CWnd 衍生類內,需依附當前視窗
::MessageBox(...)全域 API MessageBox獨立對話框、主控台程式、非 MFC 環境
AfxMessageBox(...)MFC 全域輔助函式自動關聯主視窗、支援資源字串 ID

現代 C++ 建議

  • 使用 nullptr 取代 NULL,避免整數/指標多載解析歧義。
  • Windows 程式設計建議封裝平台 API,降低耦合度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved