Ini dia:
#include <iostream>
int main()
{
std::endl(std::operator<<(std::cout, "Hello world!"));
}
Dengan menulis seperti ini, kami menghindari ADL rawan kesalahan bersama dengan menggunakan arahan dan deklarasi.
Ini dimaksudkan sebagai jawaban sarkastik. :-D
Saya dengan Herb Sutter melalui Google untuk yang satu ini. Dari C ++ Standar Pengodean:
Anda dapat dan harus menggunakan namespace menggunakan deklarasi dan arahan secara bebas dalam file implementasi Anda setelah #mengikutsertakan arahan dan merasa nyaman karenanya. Meskipun pernyataan berulang yang bertentangan, namespace menggunakan deklarasi dan arahan tidak jahat dan mereka tidak mengalahkan tujuan ruang nama. Sebaliknya, mereka adalah apa yang membuat ruang nama dapat digunakan .
Anda dapat terobsesi tentang potensi konflik namespace yang mungkin tidak akan pernah terwujud dan mungkin tidak akan sulit untuk diperbaiki dalam peristiwa yang jarang terjadi secara astronomis dengan secara hati-hati menghindari using
arahan dan secara eksplisit menentukan setiap hal yang Anda gunakan (turun ke operator) dengan using
deklarasi, atau langsung saja dan mulai using namespace std
. Saya merekomendasikan yang terakhir dari sudut pandang produktivitas.
Kebanyakan buku teks c ++ mengajarkan pemula dengan menggunakan namespace std; Apakah mereka menyebarkan praktik pengkodean yang buruk?
Sebaliknya jika Anda bertanya kepada saya, dan saya percaya Sutter di atas setuju.
Sekarang, selama karir saya, saya telah menemukan sekitar 3 konflik namespace total sebagai akibat langsung dari using
arahan dalam basis kode yang mencakup puluhan juta LOC. Namun, dalam semua 3 kasus, mereka berada dalam file sumber yang membentang lebih dari 50.000 baris kode warisan, awalnya ditulis dalam C dan kemudian dibastardisasi ke C ++, melakukan daftar eklektik besar fungsi yang berbeda, termasuk header dari selusin perpustakaan yang berbeda, dan memiliki daftar epik #includes
yang membentang di atas halaman. Terlepas dari kekacauan epik, mereka tidak terlalu sulit untuk diperbaiki karena mereka menyebabkan kesalahan build pada OSX (satu OS di mana kode gagal dibangun), bukan bug runtime. Jangan mengatur kode Anda dengan cara mengerikan ini dan Anda harus baik-baik saja.
Yang mengatakan, menghindari baik using
arahan dan deklarasi di file header. Itu hanya terbelakang. Tetapi untuk file sumber, dan terutama file yang tidak memiliki halaman penuh dengan #include
arahan, saya katakan jangan khawatirkan jika Anda tidak bekerja untuk Google.