更新, 忘記當時寫的具體是啥了…
大概就是下面這個意思…
今天敲了這樣一段** (簡化版本)
我在(1)的部分得到報錯:#include #include #include using namespace std;
class t
}void func()
};int main()
}
error: invalid use of non-static member function 『void t::func()』
t1.push_back(make_shared(t::func, this)); //(1)
因為 c++ 禁止獲取不合格或括號內的非靜態成員函式的位址這是因為只有在顯示的使用&時,才會形成指向類成員的指標,並且後面的識別符號是不在括號中的,即
&qualified-id
如果是&(qualified-id)
是不能形成指向其的指標的.因為沒有從非靜態成員函式"到"指向函式成員的指標"的型別
所以應該是
&t::func
當然, 後面的this
大家都是知道, 是因為類內成員隱含引數 this 指標的原因 C 11類成員的初始化總結
以前看到的c 98的文章 c 為類中提供類成員的初始化列表。類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 2.進入建構函式後在建構函式中執行一般計算 1.類裡面的任何成員變數在定義時是不能初始化的。2.一般的資料成員可以在建構函式中初始化。3.const資料...
C 類內成員初始化
所有標準為c11標準,舊的就不看了。首先說一條指導規則 通常情況下,不應該在類內部初始化成員!無論是否為靜態 是否為常量 是否為int等!統統不建議在類內初始化,因為本質上類只是宣告,並不分配記憶體,而初始化會分配記憶體,類內初始化會將兩個過程混在一起!按順序說。首先靜態成員,用static限制的成...
C 11 列表初始化及類內初始化
c 11中,集合 列表 的初始化已經成為c 語言的乙個基本功能,這種初始化的方法被稱為 初始化列表 initializer list 例如 include include using namespace std int a int b vector int c map int,float d 這樣一...