Saya tidak memiliki konteks khusus di mana saya mengajukan pertanyaan, tetapi ketika saya membaca buku pemula tentang C ++ saya memperhatikan penggunaan manipulator aliran akhir dan karakter pelarian baris baru ketika berhadapan dengan objek aliran.
Exmaple adalah sebagai berikut:
cout << "Hello World" << endl;
cout << "Hello World\n";
Pertanyaan saya adalah:
- Apakah lebih tepat menggunakan stream manipulator (endl) dalam situasi tertentu dan karakter pelarian di situasi yang berbeda?
- Apakah ada kelemahan efisiensi untuk menggunakan salah satu dari keduanya?
- Apakah mereka benar-benar dipertukarkan?
- Saya membaca bahwa urutan pelarian disimpan dalam memori sebagai satu karakter. Apakah itu berarti lebih tepat menggunakan endl jika Anda menggunakan memori yang rendah?
- Apakah manipulator aliran pada akhirnya menggunakan memori dengan cara apa pun, jika demikian apakah itu lebih dari urutan pelarian?
Terima kasih, StackExchange Maaf jika saya memposting ini di bagian yang salah, saya pikir itu dihitung sebagai struktur data.
c++
data-structures
Nathan Taylor
sumber
sumber
Jawaban:
o << std::endl
setara dengan kode berikut:Dengan kata lain, Anda hanya boleh menggunakan
std::endl
saat Anda perlu menyiram aliran. Sebagai contoh:Jika Anda tidak perlu menyiram aliran, gunakan
\n
sebagai gantinyastd::endl
. Panggilan ekstra keflush
dapat merusak kinerja (kadang-kadang secara signifikan).Untuk detail lebih lanjut, lihat cppreference.com .
Mengenai penggunaan memori: Mengkhawatirkan
\n
versusstd::endl
hampir pasti merupakan mikro-optimasi yang tidak perlu, tetapi secara umum, saya berharap\n
untuk mengambil lebih sedikit memori.\n
hanya satu byte lagi di akhir string literal, sementara tulisanstd::endl
diterjemahkan oleh kompiler ke dalam (mungkin diuraikan) fungsi panggilan keput
danflush
.Perbedaan spesifik platform pada ujung garis (Windows
\r\n
versus Linux dan OS X\n
) ditangani pada tingkat yang lebih rendah daripadastd::endl
dan\n
:\n
, aliran itu secara otomatis menerjemahkannya ke akhir baris khusus platform yang sesuai. Jika Anda membaca akhir baris khusus platform, aliran otomatis menerjemahkannya ke\n
.std::cout
danstd::cin
khususnya, mereka diperlakukan seolah-olah mereka mode teks.sumber
1) Untuk portabilitas, gunakanSunting: Sesuai komentar, ujung khusus sistem garis ditangani pada tingkat yang lebih rendah.endl
. Baris baru Windows adalah\r\n
, Linux\n
dan Mac\r
.2)
endl
menyiram aliran,"\n"
tidak.3) Tergantung pada portabilitas.Mengenai penggunaan memori, Anda dapat menguranginya dengan membilas ke penyimpanan lain sesering mungkin dengan
endl
. Namun, itu akan menurunkan kinerja.Sunting: Hapus beberapa kesalahan.
sumber
\n
pada mesin modern.endl
dan\n
setara dalam hal akhir baris khusus platform; perbedaan platform ditangani di tingkat yang lebih rendah.End of line sequence
(dengan asumsi mode teks). ItuEnd of line sequence
dikonversi kembali ke '\ n` ketika membaca dari file. Butir 3) meragukan. Dan paragraf terakhir sekali lagi salah: Pembilasan tidak akan menghemat ruang Anda dan pembilasan lebih dari yang dibutuhkan akan memperlambat kode Anda (titik buffer adalah untuk meningkatkan efisiensi penulisan ke perangkat yang lambat).