Vincent Robert benar dalam komentarnya. Bagaimana Anda menggunakan ruang nama dengan benar di C ++? .
Menggunakan namespace
Namespaces paling tidak digunakan untuk membantu menghindari tabrakan nama. Di Jawa, ini diberlakukan melalui idiom "org.domain" (karena seharusnya seseorang tidak akan menggunakan apa pun selain dari nama domainnya sendiri).
Di C ++, Anda bisa memberikan namespace ke semua kode di modul Anda. Misalnya, untuk modul MyModule.dll, Anda bisa memberikan kode-nya namespace MyModule. Saya pernah melihat orang lain menggunakan MyCompany :: MyProject :: MyModule. Saya kira ini berlebihan, tetapi secara keseluruhan, tampaknya benar bagi saya.
Menggunakan "menggunakan"
Penggunaan harus digunakan dengan sangat hati-hati karena secara efektif mengimpor satu (atau semua) simbol dari namespace ke namespace Anda saat ini.
Ini jahat untuk melakukannya dalam file header karena header Anda akan mencemari setiap sumber termasuk (mengingatkan saya pada makro ...), dan bahkan dalam file sumber, gaya buruk di luar lingkup fungsi karena akan mengimpor pada lingkup global simbol dari namespace.
Cara paling aman untuk menggunakan "menggunakan" adalah dengan mengimpor simbol pilih:
void doSomething()
{
using std::string ; // string is now "imported", at least,
// until the end of the function
string a("Hello World!") ;
std::cout << a << std::endl ;
}
void doSomethingElse()
{
using namespace std ; // everything from std is now "imported", at least,
// until the end of the function
string a("Hello World!") ;
cout << a << endl ;
}
Anda akan melihat banyak "using namespace std;" dalam tutorial atau contoh kode. Alasannya adalah untuk mengurangi jumlah simbol untuk membuat bacaan lebih mudah, bukan karena itu adalah ide yang bagus.
"menggunakan namespace std;" tidak disarankan oleh Scott Meyers (saya tidak ingat persis buku mana, tapi saya bisa menemukannya jika perlu).
Komposisi Namespace
Ruang nama lebih dari sekedar paket. Contoh lain dapat ditemukan dalam "Bahasa Pemrograman C ++ Bjarne Stroustrup".
Dalam "Edisi Khusus", di 8.2.8 Komposisi Namespace , ia menjelaskan bagaimana Anda dapat menggabungkan dua ruang nama AAA dan BBB menjadi yang lain yang disebut CCC. Dengan demikian CCC menjadi alias untuk AAA dan BBB:
namespace AAA
{
void doSomething() ;
}
namespace BBB
{
void doSomethingElse() ;
}
namespace CCC
{
using namespace AAA ;
using namespace BBB ;
}
void doSomethingAgain()
{
CCC::doSomething() ;
CCC::doSomethingElse() ;
}
Anda bahkan dapat mengimpor simbol pilihan dari ruang nama yang berbeda, untuk membangun antarmuka namespace kustom Anda sendiri. Saya belum menemukan penggunaan praktis ini, tetapi secara teori, itu keren.
std
namespace menjadi simbol daripada menggunakanusing
sama sekali. Jadi saya selalu menulisstd::cout
ataustd::string
sekarang karena saya menyebutnya sekarang. Saya tidak akan pernah menulis begitu sajacout
.