c 11 以類內成員函式初始化執行緒

2021-08-21 18:03:59 字數 742 閱讀 6876

更新, 忘記當時寫的具體是啥了…

大概就是下面這個意思…

今天敲了這樣一段** (簡化版本)

#include #include #include using namespace std;

class t

}void func()

};int main()

}

我在(1)的部分得到報錯:

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 這樣一...