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

C++ 靜態成員變量與函數定義差異:內存分配時機不同

     編輯:程式設計疑難解答

現象

靜態成員函數可在類內定義,靜態成員變量不能在類內初始化(C++11 前):

class A {
    static void func() { } // OK
    static int a = 1;      // Error
};

本質原因

  • 靜態成員函數:不佔用對象內存,編譯期確定代碼段地址,可直接在類內定義(隱式 inline)。
  • 靜態成員變量:屬於類共享,必須在全局/靜態存儲區分配內存,需在類外單獨定義(int A::a = 1;),確保僅有一份實體。類內僅聲明。

C++17 允許 static inline int a = 1; 在類內定義並分配內存。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved