Re: [問卦] C十十 適合新手嗎?

作者: dzwei (Cout<< *p << \n ;)   2020-10-10 19:15:13
C++有兩個分水嶺
一個是在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
還好吧!一樓也太容易放棄了?文組嗎?
作者: cuteSquirrel (松鼠)   2020-10-10 19:18:00
XD
作者: Nigger5566 (尼哥56)   2020-10-10 19:18:00
講中文謝謝
作者: Ericz7000 (Ericz7000nolan)   2020-10-10 19:19:00
新手看到標題就放棄了
作者: kindaichitom (飯吃到下巴脫臼)   2020-10-10 19:19:00
新手你給他template...
作者: ggirls (哥)   2020-10-10 19:19:00
書有中文版嗎?沒有推什麼推。
作者: ekgs (ekgs)   2020-10-10 19:20:00
c++很有野心想解決一堆問題 搞到現在又肥又大
作者: riker729 (riker)   2020-10-10 19:20:00
新手不是應該先寫個hello world?
作者: longlyeagle (長鷹寶寶實驗室)   2020-10-10 19:21:00
結論笑死
作者: snow3804 (snow3804)   2020-10-10 19:22:00
說中文好嗎
作者: DarkIllusion (′・ω・‵)   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:00
C++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:00
python入門的 看過太多之後碰其它語言連個型別都不會分
作者: kindaichitom (飯吃到下巴脫臼)   2020-10-10 19:43:00
入門我建議用QB
作者: velaro (下路雙組合)   2020-10-10 19:46:00
typedef難用
作者: ggirls (哥)   2020-10-10 19:48:00
effective是指教你寫出effective的code;還是effectively入門本啊?

Links booklink

Contact Us: admin [ a t ] ucptt.com