Hal-hal tentang C ++ yang membuat programmer C gugup
Ada banyak keajaiban terjadi di bawah tenda; konstruktor, destruktor, metode virtual, templat, dll., dapat membuat kode C ++ jauh lebih mudah dan lebih cepat untuk ditulis daripada kode C yang setara, tetapi lebih sulit untuk dipahami dan dijelaskan (tergantung pada seberapa baik Anda mengetahui C ++ dan konvensi terkait). Sesuatu yang sesederhana Foo newFoo;
mungkin memanggil banyak kode, tergantung pada bagaimana konstruktor untuk kelas Foo
(dan semua kelas yang bergantung padanya) telah didefinisikan. Inilah sebabnya mengapa konvensi ini adalah menulis ++it
alih-alih it++
ketika iterasi melalui suatu wadah, karena postfix ++
sering melibatkan operasi penyalinan yang mahal.
Tergantung pada apa yang Anda lakukan, mungkin ada beberapa overhead non-sepele, terutama untuk tugas-tugas sederhana. Ambil dua program berikut, yang pertama di C, yang kedua di C ++:
/* C version */
#include <stdio.h>
int main(void)
{
char greeting[] = "Hello, world";
printf("%s\n", greeting);
return 0;
}
/* end C version */
/* C++ version */
#include <iostream>
#include <string>
int main(void)
{
std::string greeting("Hello, world");
std::cout << greeting << std::endl;
return 0;
}
/* end C++ version */
Perilaku identik, tidak banyak perbedaan dalam hal sumber, tetapi pada kotak 10 SLES saya bekerja dengan gcc 4.1.2, yang pertama menghasilkan executable ~ 9kb dalam ukuran, sedangkan yang kedua mengambil lebih dari 12.5kb (tidak ada optimasi ), hampir 28% lebih besar. Tipe C ++ string
jauh lebih mudah untuk bekerja dengan IMO daripada pustaka string C, dan stream C ++ jauh lebih fleksibel dan dapat dikustomisasi daripada stream C, tetapi untuk kode yang benar-benar mati otak seperti ini, mereka mungkin tidak sebanding dengan overhead.
C ++ adalah bahasa yang sangat besar dibandingkan dengan C, dengan beberapa semantik yang sangat kompleks. Dibutuhkan jauh lebih lama untuk menjadi mahir dengan C ++ daripada C, yang berarti banyak orang yang mengaku tahu C ++ tidak mengetahuinya sebaik yang mereka kira.
Hal-hal tentang C yang membuat programmer C ++ gugup
C bukan bahasa pemrograman yang aman oleh imajinasi apa pun; tidak ada batas memeriksa pada array menyebabkan banyak perilaku dieksploitasi (baik itu melalui sekarang-mati gets
fungsi, atau melalui scanf
dengan %s
dan %[
specifier konversi). C ++ setidaknya memberi Anda wadah yang melempar pengecualian jika Anda mencoba mengakses di luar kisaran yang ditentukan saat ini; semua C memberi Anda adalah (jika Anda beruntung) pelanggaran segmentasi.
Manajemen memori di C sangat padat karya dan rentan kesalahan, dibandingkan dengan alat yang disediakan C ++ untuk Anda. Jika Anda membangun wadah sendiri, Anda bertanggung jawab untuk mencocokkan semua malloc
dan free
panggilan, memastikan alokasi berhasil, mencadangkan semua alokasi parsial jika terjadi kesalahan, dll. Dalam C ++, Anda hanya menambahkan item ke atau hapus item dari wadah. Jika ada masalah, pengecualian akan dilempar.
Demikian pula, penanganan kesalahan dalam C adalah rasa sakit di pantat dibandingkan dengan alat C ++ menyediakan (yaitu, pengecualian). Apa yang benar-benar menyenangkan adalah ketika Anda telah mengalokasikan banyak memori dan kemudian menabrak dinding dalam pemrosesan Anda; karena Anda harus mundur, Anda harus melepaskan memori itu dalam urutan yang benar. Dengan prinsip-prinsip C ++ dan RAII, ini (relatif) mudah dilakukan.
Jadi kapan saya menggunakan satu di atas yang lain?
Jika apa yang Anda tulis adalah rawa sederhana, bacalah / hilangkan dengan itu / singkirkan aplikasi itu, yang perilakunya dapat dijelaskan secara bersih dalam hal input dan output, dan masalah kinerja, maka lebih suka C daripada C ++. Kalau tidak, lebih suka C ++