首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 運算符詳解:點號(.)、冒號(:)、雙冒號(::)、箭頭(->) 完整用法指南

     編輯:關於C++

1. 雙冒號 :: (作用域解析運算符)

核心用法

場景示例說明
類外定義成員`void A::func() {}`指明 func 屬於類 A
訪問靜態成員`A::staticVar`無需對象實例
訪問嵌套類型`A::NestedType`
全局作用域`::globalFunc()`區分同名局部/全局
命名空間`std::vector`
基類成員`Base::func()`在派生類中調用被覆蓋的基類版本

經典陷阱:全局 vs 成員


int x = 10;
void foo() {
    int x = 20;
    cout << x;       // 20 (局部)
    cout << ::x;     // 10 (全局)
}

2. 冒號 : (多重語境)

語境示例說明
繼承聲明`class Derived : public Base`指定繼承方式
構造函數初始化列表`A() : x(0), y(1) {}`直接初始化成員,const/引用必須用此法
位域聲明`unsigned int a : 4;`指定佔用位數
訪問控制`public:` `private:`後續成員屬於此訪問級別
標號`label: statement;`配合 goto 使用
三元運算符`cond ? a : b`條件表達式
範圍-based for (C++11)`for (auto& x : vec)`遍歷容器

初始化列表 vs 賦值


class A {
    const int x;
    int y;
public:
    A(int a) : x(a), y(a) {}  // 正確:初始化 const x
    // A(int a) { x = a; y = a; }  // 錯誤:const 不能賦值
};

3. 點號 . (成員訪問)

  • 用於對象實例或引用訪問成員:`obj.member`、`ref.member`
  • 結構體/類/聯合體通用

4. 箭頭 -> (指針成員訪問)

  • 用於指針訪問成員:`ptr->member` 等價於 `(*ptr).member`
  • 智能指針 (`unique_ptr`, `shared_ptr`) 重載了 `->`,用法相同

核心區別速記


A obj;      // 對象
A* ptr = &obj;  // 指針
A& ref = obj;   // 引用

obj.func();   // . 訪問對象
ref.func();   // . 訪問引用
ptr->func();  // -> 訪問指針
(*ptr).func(); // 等價

A::staticFunc();  // :: 訪問靜態/類級別

優先級與結合性

`::` 最高 (單目),`->` `.` 其次 (左結合),`:` 在特定語境中非運算符。三元 `? :` 優級極低,右結合。

常見錯誤集錦

  1. `ptr.func()` → 應為 `ptr->func()`
  2. 構造函數體內賦值 const 成員 → 應用初始化列表 `:`
  3. 忘記 `::` 定義類外成員函數 → 編譯錯誤
  4. 三元運算符優先級導致邏輯錯誤 → 加括號 `(cond ? a : b)`
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved