Sudah ada banyak jawaban bagus. Milik saya akan lebih berorientasi pada pola pikir.
Data vs. Tindakan!
- Di C, semuanya dilakukan untuk berpikir seperti Terapkan efek ini ke data ini.
- Di C++, ini lebih seperti perilaku Data.
Meskipun Data seharusnya berperilaku dapat dilakukan di C (dan selesai!), di C++, semua yang diperlukan untuk mengimplementasikan hal ini dengan mudah sudah dapat diakses: Enkapsulasi, konstruktor, overriding kelebihan beban, templat, dll.
Saya menemukan bahwa Data ini harus berperilaku sebagai prinsip panduan yang sangat baik saat membuat kode dalam C++.
Gula sintaksis C++ bukanlah opsional
Anda akan menemukan banyak fitur C++ yang bisa dilakukan di C, dan beberapa orang menggunakannya sebagai alasan untuk tidak mempelajarinya. Pola pikir ini berbahaya (ini adalah bagian yang memperlakukan C++ sebagai bahasa baru, dan bukan ekstensi yang terlihat di beberapa postingan).
Efek samping dari menghindari penulisan C++ dengan cara C++ adalah meskipun pengembang C++ seharusnya memahami kode C++, dia tidak seharusnya memahami kerangka pribadi kecil Anda yang meniru gula C++ dengan fitur khusus C. Faktanya, dia tidak akan tertarik dengan kerangka kerja Anda. Sejujurnya, dia hanya akan merasa kasihan/hina terhadap Anda karena Anda kehilangan waktu berharga untuk memproduksinya. Pada akhirnya, dia akan membenci Anda jika dia harus menggunakan kerangka kerja Anda, bukan gula C++.
Prinsip panduan seperti saya bisa melakukan ini dengan cara C hanya akan membuat Anda ketinggalan pelajaran. Sebaiknya jangan mulai belajar C++ sama sekali jika Anda sudah memiliki cara berpikir C-centric seperti ini.
Bahasa pilihan Anda tidak pernah yang terbaik. ANDA seharusnya menjadi yang terbaik. Jika Anda menulis kode C++, tulislah dengan cara C++.
Kode C++ yang kompatibel dengan C adalah kesalahan semantik
Mengetik struct Anda agar dapat dikompilasi oleh kompiler C adalah lelucon yang buruk. Menggunakan petunjuk alih-alih referensi merupakan tamparan bagi diri Anda di masa depan. extern "C"
hanya akan membuat kode Anda lebih lemah, bukan lebih kuat. Dan menggunakan void *
untuk generik hanya akan meningkatkan jumlah sesama pembuat kode C++ yang dengan senang hati akan membayar agar kepala Anda dipenggal dengan cara yang sangat menyakitkan.
Jangan pernah repot-repot menulis kode yang kompatibel dengan C kecuali Anda benar-benar sangat harus melakukannya.
Anda hanya akan membebani diri Anda sendiri dengan gaya pengkodean yang memakan waktu untuk fitur yang tidak akan pernah Anda gunakan.
Kompiler adalah teman/musuh yang kuat
Bekerja pada tingkat rendah mempunyai efek yang aneh pada beberapa pengembang. Mereka sangat percaya pada kendali mereka terhadap kode yang dikompilasi. Sulit bagi mereka untuk mendelegasikan kendali ini ke konstruksi tingkat yang lebih tinggi.
Contoh bagusnya adalah membuang pola konstruktor/destruktor karena terkadang, konstruktor memakan terlalu banyak waktu... Lebih baik melakukannya dengan cara saya....
Kompiler C++ cukup mampu mengoptimalkan kode yang tampaknya tidak dioptimalkan. Faktanya, kode yang dihasilkan oleh kompiler bisa sangat berbeda dari kode yang Anda yakini telah Anda buat.
Jangan mencoba menjadi lebih baik/lebih pintar dari kompiler karena:
- Anda mungkin sudah kalah, karena kompiler lama pun biasanya akan menghasilkan kode yang lebih baik daripada yang Anda impikan saat ini
- Bahkan jika Anda memenangkan pertarungan hari ini, secara otomatis akan berubah menjadi kekalahan besok, karena kompiler akan menjadi lebih baik dan lebih baik di masa depan, sehingga kode Anda yang dioptimalkan hari ini akan menjadi penghambat program dan subjek pemfaktoran ulang di tahun-tahun mendatang (belum lagi kenangan memalukan untukmu).
Jadi, percayalah pada kompiler Anda.
Jangan mengatur produksi kode Anda secara mikro. Kerjakan pekerjaan Anda sendiri, dan biarkan compiler mengerjakannya sendiri.
Perhatikan bahwa poin ini tidak boleh digunakan untuk membenarkan produksi kode yang lambat/tidak efisien. Jika optimasi prematur adalah akar dari segala kejahatan, Anda masih harus menggunakan pengetahuan Anda tentang bahasa dan kompiler untuk menghasilkan kode yang baik dan efisien (lihat poin berikutnya).
Ketahui keuntungan/kerugian/biaya setiap konstruksi C++
Misalnya, fakta bahwa metode virtual menambahkan satu tipuan ke pemanggilan fungsi berarti bagi sebagian orang bahwa kinerja akan menurun drastis. Sebenarnya, masalah kinerja sering kali terjadi di tempat lain.
Ketidaktahuan bukanlah alasan.
Ketahui kode yang dihasilkan untuk setiap konstruksi C++ (yaitu inlining, referensi, konstruktor, destruktor, pengecualian, kelebihan fungsi, penggantian fungsi, templat, fungsi virtual, dll.). Ketahui apa yang akan dioptimalkan, dan apa yang tidak.
Dengan cara ini, Anda tidak hanya tidak perlu membayar untuk barang yang tidak Anda perlukan (ini adalah prinsip panduan C++), namun Anda juga akan mendapatkan keuntungan dari barang yang tidak mengeluarkan biaya apa pun, namun memberikan banyak manfaat.
Jadilah rendah hati
Ada orang yang melakukan penelitian di C++ yang menguasai C++ lebih baik pada hari kelahiran mereka daripada kebanyakan dari kita. Sekalipun kita mengabaikan Stroustrup, nama-nama seperti Meyers, Abraham, Alexandrescu, Sutter, dll. sering muncul bersamaan dengan ide-ide baru. Meskipun (atau sebagai konsekuensi dari) pandangannya yang asing, STL adalah perpustakaan revolusioner. Dan perpustakaan seperti Boost, meskipun ukurannya kecil jika dibandingkan dengan beberapa kerangka kerja lengkap (seperti Java atau .NET API), adalah gudang besar kode luar biasa yang ditawarkan kepada Anda untuk dipelajari.
Hanya karena Anda menganggap fitur baru itu aneh atau asing, jangan meremehkannya. Mencoba memahaminya MUNGKIN akan memberi Anda alat lain yang Anda inginkan, dan SELALU akan meningkatkan penguasaan bahasa Anda, dan SELALU akan membuat otak Anda bekerja, yang merupakan hal yang baik dalam bisnis pengembang.
Kebanyakan orang yang saya kenal yang gagal dalam konversi ke C++ hanya berasumsi bahwa fitur ini tidak berguna karena mereka tidak mau memahaminya.
Jika Anda tidak tahu apa itu, pelajarilah.
Tanpa RAII, kode C++ Anda hanyalah kode yang disadap untuk menghindari kesalahan kompilasi.
RAII adalah satu-satunya gagasan terpenting dalam C++.
Segala sesuatu yang lain saling terkait.
person
paercebal
schedule
14.09.2009