Ini mungkin duplikat tetapi saya tidak melihat pertanyaan yang persis sama. Apakah deklarasi using namespace berhenti di akhir file sumbernya jika tidak ditulis dalam header ?

foo.cpp

using namespace foo; // will this using namespace's scope end at the end of this file?
some random code...

Atau apakah kita perlu membuat ruang lingkup?

bar.cpp

{
    using namespace bar;
    some random code...
}
c++
2
Fayeure 13 Mei 2021, 19:03

1 menjawab

Jawaban Terbaik

Jawaban singkatnya adalah bahwa dalam 99% waktu using namespace ... Anda terbatas pada satu .cpp yang ada di dalamnya dan file .cpp lainnya tidak memilikinya.

Namun Anda harus mempelajari unit kompilasi dan cara kerjanya dengan praprosesor. Biasanya satu unit kompilasi adalah file sumber tunggal. File sumber tunggal itu mungkin sering memiliki #include instruksi ke praprosesor. Jika using namespace bar; Anda terjadi sebelum #include itu, namespace akan mencemari header tersebut.

Anda tidak akan melihat polusi itu dari file .cpp lain kecuali namespace menyebabkan perbedaan. Jadi misalnya, jika Anda memiliki fungsi namespace bar::min, maka using namespace bar; tepat sebelum #include akan mengubah fungsi min apa yang tersedia untuk header. Jadi di foo.cpp mungkin menggunakan bar::min tetapi kemudian di bar.cpp mungkin menggunakan std::min. Itu mungkin atau mungkin tidak menyebabkan kesalahan, peringatan, atau bahkan perbedaan saat runtime. Itu benar-benar tergantung pada nama apa yang terpengaruh.

4
inetknght 13 Mei 2021, 16:18