問題:想打印結構體 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 均報錯誤。
void (A::*pf)() = &A::someMethod; // 合法
auto createA = [](){ return A(); };
// 或
A* (*factory)() = [](){ return new A(); };
typeid、__PRETTY_FUNCTION__、或外部工具 (DWARF/PDB) 獲取符號信息,而非運行時取地址。C++ 語言層面不支持獲取構造函數地址,請改用工廠模式、lambda 或普通成員函數指針實現相關需求。