Saya meletakkan keterampilan C ++ saya di rak beberapa tahun yang lalu dan sepertinya sekarang, ketika saya membutuhkannya lagi, lanskap telah berubah.
Kami telah mendapatkan C ++ 11 sekarang, dan pemahaman saya adalah bahwa ini tumpang tindih dengan banyak fitur Boost.
Apakah ada beberapa ringkasan di mana tumpang tindih itu terletak, yang akan meningkatkan perpustakaan menjadi warisan, rekomendasi yang menggunakan fitur C ++ 11 untuk digunakan alih-alih yang meningkatkan dan yang lebih baik tidak?
Jawaban:
Digantikan oleh fitur bahasa atau pustaka C ++ 11
<cmath>
, lihat daftar di bawah inilog1p
,expm1
cbrt
,hypot
acosh
,asinh
,atanh
TR1 (mereka ditandai dalam dokumentasi jika itu adalah perpustakaan TR1)
Fitur yang di-porting dari C ++ 11:
Diganti dengan fitur bahasa C ++ 17:
<cmath>
( IS Matematika Khusus ), lihat daftar di bawah iniTim standar masih mengerjakannya:
Sebagian besar MPL dapat dipangkas atau dihapus menggunakan templat variadic. Beberapa kasus umum penggunaan cast Lexical dapat diganti dengan std :: to_string dan std :: sto X .
Beberapa pustaka Boost terkait dengan C ++ 11 tetapi juga memiliki beberapa ekstensi lagi, misalnya Boost.Functional / Hash berisi hash_combine dan fungsi terkait yang tidak ditemukan di C ++ 11, Boost.Chrono memiliki I / O dan pembulatan dan banyak jam lainnya, dll. jadi Anda mungkin masih ingin melihat yang meningkatkan sebelum benar-benar menolaknya.
sumber
std::unique_ptr
adalah bagian dari TR1 (karena ini membutuhkan semantik bergerak)Sebenarnya, saya tidak berpikir peningkatan perpustakaan akan menjadi warisan.
Ya, Anda harus dapat menggunakan
std::type_traits
,regex
,shared_ptr
,unique_ptr
,tuple<>
,std::tie
,std::begin
bukan Typetraits Meningkatkan / Utility, Meningkatkan Smartpointer, Meningkatkan Tuple, Meningkatkan Rentang perpustakaan, tapi harus dalam prakteknya tidak ada kebutuhan nyata untuk 'switch' kecuali Anda bergerak lebih dari kode Anda ke c ++ 11.Juga, dalam pengalaman saya,
std
sebagian besar versi ini agak kurang fitur. Misalnya AFAICT yang standar tidak milikibool boost::basic_regex<>::empty()
) dan perbedaan antarmuka lainnyaMalas, lambdas berbasis template ekspresi; mereka memiliki manfaat yang tak terhindarkan karena mereka bisa menjadi polimorfik saat ini , dibandingkan dengan C ++ 11. Karena itu mereka sering kali lebih ringkas:
Yang paling pasti, ini masih memiliki beberapa daya tarik atas lambda C ++ 11 (dengan tipe trailing return, penangkapan eksplisit dan parameter yang dinyatakan).
Juga, ada peran BESAR untuk Peningkatan, tepatnya dalam memfasilitasi migrasi jalur-bijaksana dari C ++ 03 ke C ++ 11 dan mengintegrasikan basis kode C ++ 11 dan C ++ 03. Saya terutama memikirkan
boost::result_of<>
dan terkait)Hanya $ 0,02 saya
sumber