作者:
dzwei (Cout<< *p << \n ;)
2020-10-10 19:15:13C++有兩個分水嶺
一個是在C++11以前的
另一個是C++11以後的
稱為Modern C++
這篇我就focus on Modern C++
大概就是C++11 C++14 C++17 C++20
Modern C++會強調
* Smart Pointer
自動回收空間
能避免dangling reference造成程式crash
* Perfect Forwarding / R-value reference
首先
先去了解什麼是 r-value/l-value
再去了解r-value-reference/l-value-reference
然後完美轉發就是基於 R-value reference
如果有人問你
"C++比C快在哪裡"
你可以回它因為有著Perfect forwarding的機制在
* std:thread
concurrency的表準化
裡面除了mutex外
還有效率更高的atom
兩者有各自適合的地方
* constexpr關鍵字
可以讓編譯器在編譯時期優化的一個新cv-qualified
* auto/decltype 型別推斷
C++11開始引入
現在C++17已經算是很完整了
如果型別是編譯時期就知道的
請使用auto關鍵字
給定一段程式
template<typename It> // algorithm to dwim ("do what I mean")
void dwim(It b, It e) // for all elements in range from
{
//想自動取的It<T> 裡面的型別T作為初始化宣告
T val = ...
}
你有想過我要如何自動得到並初始化
It<T>裡面的型別T嗎
這要要用到trait-class
template<typename It> // algorithm to dwim ("do what I mean")
void dwim(It b, It e) // for all elements in range from
{ // b to e
while (b != e) {
typename std::iterator_traits<It>::value_type
currValue = *b;
…
}
}
三小 這麼簡地的事情也要弄到那麼複雜的trait-class
C++11自從有了auto之後,
這件事情不再痛苦
template<typename It> // as before
void dwim(It b, It e)
{
while (b != e) {
auto currValue = *b;
…
}
* 請使用 using A = TYPE 取代 typedef
trait-calss是個有點複雜的東西
請愛用using + auto 取代這個
比方說
std::remove_const<T>::type 可以寫成
std::remove_const_t<T> ,
而std::remove_const_t<T> 的實作即
template <class T>
using remove_const_t = typename remove_const<T>::type;
推薦書籍:
Effective Modern C++
但建議先看過:
Effective C++
結論: 歡迎跳槽到rust ^_^
作者:
riker729 (riker)
2020-10-10 19:17:00新手看完第一段決定放棄
作者:
qsxwdc (Moo)
2020-10-10 19:18:00還好吧!一樓也太容易放棄了?文組嗎?
作者:
Ericz7000 (Ericz7000nolan)
2020-10-10 19:19:00新手看到標題就放棄了
作者:
ggirls (哥)
2020-10-10 19:19:00書有中文版嗎?沒有推什麼推。
作者:
ekgs (ekgs)
2020-10-10 19:20:00c++很有野心想解決一堆問題 搞到現在又肥又大
作者:
riker729 (riker)
2020-10-10 19:20:00新手不是應該先寫個hello world?
作者:
snow3804 (snow3804)
2020-10-10 19:22:00說中文好嗎
作者: neofire (沒耐心的人....) 2020-10-10 19:22:00
學了總是有好處吧
作者:
CorkiN (柯基)
2020-10-10 19:26:00大神出沒
作者:
jasonlou (俄羅斯方蓋)
2020-10-10 19:27:00C++11之後還能宣告local lambda function,真他X方便
作者:
ggirls (哥)
2020-10-10 19:27:00學C++直接從effective C++開始看嗎?還是之前還要入門本?
作者:
ekgs (ekgs)
2020-10-10 19:27:00總之c++不是一個適合拿來入門的語言入門我推java
作者:
CorkiN (柯基)
2020-10-10 19:28:00沒看過effectiveC++,跟c++primer那本有什麼不一樣嗎
作者: justty32 2020-10-10 19:28:00
rust成熟了嗎?
作者:
ekgs (ekgs)
2020-10-10 19:30:00python入門的 看過太多之後碰其它語言連個型別都不會分
作者: velaro (下路雙組合) 2020-10-10 19:46:00
typedef難用
作者:
ggirls (哥)
2020-10-10 19:48:00effective是指教你寫出effective的code;還是effectively入門本啊?