進程 Process
就是程式執行後的狀態,在工作管理員看到的狀態~
線程 Thread
一個Process至少會有一個Main Thread,實際執行程式碼的也是Main Thread.
多線程 MultiThread
就是一個Process除了有Main Thread以外,還會多開其他Thread去做任務.
下面都是C++11新功能或調整~
用在一些傳參數時避免做出call by value動作,導致複製出新物件
右值參照 T &&
用於增加對暫存物件使用
主動宣告成右ref或傳入參數右ref,也不會被判定成右ref,需使用std::move轉換
下面使用重載測試呼叫結果~~~
1 | bool checkrref(int&& t) { return true; } |
false
true
true
比如常數陣列宣告,可用constexpr變成能呼叫函示或物件建構式
1 | constexpr int FunSize() {return 10;} |
初始化串列構造式
std::initializer_list
可以使建構參數或函式參數變成可透過語法{}靜態的建構,建構後固定不能改,begin傳回指標
ex int v[]{1,2,3,4,5}; 編譯器會把{…}變成initializer_list丟給陣列XDD
初始化語法擴展,更方便吧
1 | struct ex |
auto 和 decltype
auto 用法類似 var, ref型態要用auto&,指標不用
decltype(T) 能在編譯時期算出型態
範圍for
1 | int ar[] = {...} |
lambda 匿名函式 , 就是C#的 () => {} , 但是C++要用外部引用需要設定
外部引用 -> return型態 { 函式內容 }
[](int param) -> int { return param+1; }
外部引用設定
[] // 未定義不能用
[x, &y] // x傳值,y傳ref
[&] // 全部傳ref
[=] // 全部傳值
[&, x] // x傳值,其他全部傳ref
[=, &z] // z傳ref,其他全部傳值
this指標用傳值
mutable,可以使lambda能修改傳值參數,且值能保留,因為式傳值依然不影響外部值
1 | int mt = 5; |
返回型別後置的函式宣告,如下int,可解決decltype計算一些template的回傳型態
1 | auto funcenddef() -> int {} |
1 | template <typename Container, typename Index> |
物件建構可以呼叫自己的其他建構
1 | class A |
override檢查
virtual void virtual_func(float) override; 如果沒有繼承就會出錯
新nullptr定義指標空值,可以避免NULL或0有時候多載造成的錯誤
強型別列舉
1 | enum class Name : int |
int是預設值,可不指定,也可換成其他型態如uint
using 很像typedef,差別是能給模板別名
using B = A
typedef A B
template可以指定默認預設值
typename T = A
char16_t , char32_t 對應UTF16和UTF32,原本的char對應UTF8
thread_local 不管宣告在哪都會變成每個thread獨立的static物件
值會保留且獨立!!
default設定預設建構式
delete禁止產生設定函式
1 | struct A |
static_assert 編譯時期測試assertion
C++標準thread,尚未測試,以前都用Win32的thread…
std::thread
detach , 執行後不再可控制thread,只能等main thread結束後自行銷毀
joint , 等待thread結束
量級越大消耗越大吧!
std::mutex 1量級的類別,本身就能鎖,但是可能會忘記解鎖XDDD
std::lock_guard 2量級的類別,只能等結束自毀解鎖
std::unique_lock 3量級的類別,可以靈活unlock再lock,自毀也會解鎖
多元組型別,就是多個不同型態的東西已特定順序排列的結構
std::tuple;
雜湊表(Hash table) , 查詢速度極快!!
1 | std::unordered_map<T1,T2> |
等等…
正規表示式 std::regex , 對字串做檢查的
std::shared_ptr是一種ref計數的指針,沒有人在ref時才會銷毀記憶體,可assign給別人,會增加ref count
std::unique_ptr是自己生命周期到的時候會自動銷毀記憶體,不能assign給別人
新亂數產生器
linear_congruential
subtract_with_carry
mersenne_twister
std::ref,包裝參照,用在模板需要傳照的時候使用
std::result_of,計算回傳型別統一方法,用在模板return不一樣狀況
std::iota,能對std::array做連續整數填充
std::function 就是 C#System.Action
1 | int add(int a, int b) { |
參考文件:
wiki c++11
2024/06/25下班~~~~~~~~
剛收到在欣亞電腦網購的電腦零件!!!
因為自己想組裝所以沒有請欣亞電腦裝,
因為小孩關係10點多才開始開箱裝XDDD
一直忙到12點多…正常開機!!!!!!!!!
然後進BIOS…我去!! CPU為啥溫度0??????????
想說風扇稍微有在轉…先灌Win11看看吧QQ
灌完進去桌面…順手點了MSI Center看狀況…
歐不!! CPU溫度0…………..
嚇死啊!!!不會快燒了吧???…利馬關機…
隔天想說會不會是BIOS設定錯誤打電話給MSI客服!!!
客服小姐很有耐心XDDD 結果搞了15分鐘還是要拿主機板去MSI檢測0.0…
還好今天要出門順路過去!!!,測試結果主機板正常=口=
(驚)不會CPU壞掉吧??回家馬上仔細看CPU有沒有損傷,結果正常!!!
隔天馬上連絡欣亞帶去店面檢查!!!
欣亞客人蠻多的,來來去去,店員很和善!!!
測試員正在測其他電腦,順便聊了兩句!!
然後一測…CPU有問題!!!,真瑕疵品吧QQ
幸好可以換新XDDD,差點嚇死啊!!
CPU好貴阿QQ,經過這次事情再碰到類似狀況應該就不會這麼擔心了XDDD
如果有碰到類似情況不要急,請聯絡客服然後帶去店面檢查喔!!!
這邊提醒大家剛買的電腦盒子不要丟喔!!送修換新要用到~~~
最近由於各種原因~~~
剛好會需要複習以前用過的東西!!!
比如PHP、Java等等,可能是某個需求用了一下的東西~~~
也又學了一些新技術和本來沒在用的技術!!!
因為複習總是需要花時間找資料…
靈光一閃就想著把資料整理起來,
剛學到的新資料也好,
剛複習的舊東西也好,
總之讓以後再次看的時候方便一些,
雖然到時候可能是舊資料了QQ
但是能快速複習再學新東西才是重點!!!
所以就有了這個Blog的誕生!!!