:: 是 C++ 的作用域解析運算子,主要兩大用途:
類別宣告與定義分離時,類外定義成員需指明所屬類別:
class A {
void f(); // 宣告
};
void A::f() { // 定義:指明 f 屬於類別 A
// 實作內容
}
當類別成員與全域符號同名時,成員函式內無前綴預設存取成員;加上 :: 強制存取全域符號:
void GlobalFunc() { } // 全域函式
class B {
void GlobalFunc() { // 成員函式同名
GlobalFunc(); // 呼叫自身成員(遞迴或錯誤)
::GlobalFunc(); // 呼叫全域函式
}
};
呼叫 Windows API 時慣加 :: 前綴,明確指稱全域命名空間函式,避免與類別成員衝突,提升程式碼可讀性:
::GetWindowLong(hWnd, GWL_STYLE);
::SetWindowPos(hWnd, NULL, 0, 0, 0, 0, SWP_FRAMECHANGED);
::MessageBox(NULL, "Text", "Title", MB_OK);
ClassName::member:指定類別作用域::globalName:指定全域命名空間::