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

C++ 無法獲取構造函數地址:標準禁止取構造/析構函數地址

     編輯:程式設計綜合問答

問題:想打印結構體 A 構造函數 A() 的地址。

標準規定

C++ 標準 (ISO/IEC 14882) 明確禁止獲取構造函數、析構函數、類型轉換函數的地址。
原因:構造函數不具備普通函數的調用約定 (無返回值、隱含 this、可能內聯、可能多版本 (base/member/complete)),無法用函數指針表示。

編譯器行為

struct A { A() {} };
void foo() {
    // auto p = &A::A;  // 編譯錯誤:cannot take address of constructor
}

GCC/Clang/MSVC 均報錯誤。

替代方案

  1. 普通成員函數指針:只能指向非構造/析構函數。
    void (A::*pf)() = &A::someMethod;  // 合法
        
  2. 工廠函數/lambda 封裝構造過程:
    auto createA = [](){ return A(); };
        // 或
        A* (*factory)() = [](){ return new A(); };
        
  3. 調試/反射需求:用 typeid、__PRETTY_FUNCTION__、或外部工具 (DWARF/PDB) 獲取符號信息,而非運行時取地址。

總結

C++ 語言層面不支持獲取構造函數地址,請改用工廠模式、lambda 或普通成員函數指針實現相關需求。

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