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

C++核心知識點精華總結(上):指針、const、內存、構造析構全解析

     編輯:C++ 入門

1. 指針傳遞與修改權限

  • 傳指針可修改指向的內容,不可修改外部指針本身(指向對象)。
  • 需修改外部指針指向 → 傳指針的指針(T**)或指針的引用(T*&)。

2. 數組初始化速記


char carry[10] = {0}; // 編譯器將所有元素置0

3. const返回值限制

函數返回const T,賦值給同類型變量後,該變量不能作左值(不可賦值、不可取地址、不可自增)。

4. const指針三種形式語義區別


const int *p;     // 指向常量的指針:p可改,*p不可改
int const *p;     // 同上(const修飾int)
int *const p;     // 常指針:p不可改,*p可改

口訣:const在*左鎖內容,在右鎖指針。

5. 類const成員函數機制

  • 聲明:void func() const; — 承諾不修改對象狀態
  • 限制:不能修改非mutable成員,不能調用非const成員函數
  • 兩種「破壞」手段:
    1. 強制轉型:(MyClass*)this->member = val;(惡搞,慎用)
    2. 成員聲明mutable:mutable int cache; — 允許const函數修改,用於緩存、鎖、統計計數等邏輯無關狀態

6. 類內const與enum定義數組大小差異


class A {
    const int SIZE = 100;      // 不能用作數組大小:int arr[SIZE]; // 錯誤
    enum { SIZE2 = 100 };      // 可用作數組大小:int arr[SIZE2]; // 正確
};

enum成員屬於編譯期常量,const成員(非static)屬於對象實例,故前者可作數組界限。

7. enum隱式遞增規則


enum A { L = 9, Z }; // Z = 10(隱式+1)

8. const定義數組的限制

  • const int N = 10; int arr[N]; — 合法(編譯期常量)
  • const int arr[] = {1,2,3}; int arr2[arr[0]]; — 非法(數組元素非常量表達式)

9. sizeof操作數細節

10. 數組元素個數計算


int iarray[] = {12, 124, 433};
int count = sizeof(iarray) / sizeof(*iarray); // 3

11. 拷貝構造函數調用時機

  • 按值傳參(複雜對象)→ 生成臨時對象,函數結束析構
  • 按值返回對象 → 調用拷貝構造賦值給接收者
  • 導致構造/析構調用次數不等

原型:A(A&)(建議A(const A&))。默認淺拷貝(位拷貝),指針成員僅拷貝地址 → 雙重釋放風險,必須深拷貝重載。

12. volatile防優化語義

  • 告訴編譯器:勿優化該變量訪問,每次從內存讀寫
  • 多線程場景:防止寄存器緩存導致髒讀
  • 硬體寄存器映射、信號處理器共享變量必加

13. class vs struct唯一區別

  • class默認private
  • struct默認public
  • 功能完全等價,class非C++必需保留字

14. C/C++混合編程:extern "C"

  • C++編譯器對函數名做Name Mangling(如_Z3fooi)
  • C編譯器不修飾(foo)
  • 調用C庫:extern "C" { #include "clib.h" } 告訴鏈接器用C符號規則
  • 標準庫頭文件已內部處理

15. #include路徑搜索順序

  • #include "file.h":當前目錄 → 系統路徑
  • #include :直接系統路徑

16. static變量生命周期與可見性

  • 生命周期 = 主進程(程序啟動到結束)
  • 函數內static:首次調用初始化,保持值,作用域僅函數內
  • 文件級static:內部鏈接,僅本文件可見
  • 類static成員:全類對象共享一份存儲

延伸閱讀

  • C++指針用法總結
  • 如何成為合格C++程序員
  • C++編程常用工具鏈
  • 給C++初學者的50條忠告
  • C++最基礎的20條鐵律
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
操作數結果說明
數組實際佔用字節數sizeof(arr)
字符串字面值長度+1含結束符\0,存儲在靜態區
指針指針大小(4/8字節)不關心指向內存大小
函數形參數組指針大小形參退化為指針