C++ 引入作用域解析運算符 ::,主要解決名稱衝突與存取隱藏實體的問題。它是 C++ 特有的運算符,不存在於 C 語言中。
當區域變數與全域變數同名時,區域變數會遮蔽全域變數。此時可用 ::變數名 明確存取全域變數。
#include <iostream>
using namespace std;
int var = 100; // 全域變數
int main() {
int var = 50; // 區域變數,遮蔽全域 var
cout << "區域 var = " << var << endl; // 輸出 50
cout << "全域 var = " << ::var << endl; // 輸出 100
return 0;
}

在類別外部定義成員函數、存取靜態成員、或引用巢狀類型時,必須使用 類別名::成員名。
class MyClass {
public:
static int count;
void func();
};
int MyClass::count = 0; // 定義靜態成員
void MyClass::func() { // 定義成員函數
cout << "count = " << MyClass::count << endl;
}
std::cout、MyNS::MyClass::func() 強制呼叫全域函數而非同名成員函數Base::member 在衍生類中存取被遮蔽的基類成員typename T::type 存取型別別名| 錯誤情況 | 正確寫法 |
|---|---|
忘記 :: 導致存取錯誤變數 | 明確加上 :: 指定作用域 |
在類別內部對同名成員加 :: | 類別內直接用成員名即可,無需 Class:: |
混淆 :: 與 . / -> | :: 用於類別/命名空間層級,./-> 用於物件/指標 |
:: 是 C++ 型別安全與模組化的基石。善用它能消除名稱衝突、提升程式碼清晰度,是掌握 C++ 進階特性(類別、命名空間、模板)的前置技能。