簡體   English   中英

在匿名命名空間中使用命名空間是否安全?

[英]Is using namespace in an anonymous namespace safe?

匿名命名空間內的“using namespace”語句中 ,詢問以下內容是否合法

//file.cpp
//....
namespace
{
    using namespace std;
}

int a(){
 cout << "bla";
}

答案是“它是”。 此外,使用命名空間指令通常被鄙視,即使插入cpp文件中也是如此,因為自引入統一構建( https://stackoverflow.com/a/6474774/484230 )以來,頭文件和實現文件之間的范圍差異並不穩固。

我的問題:匿名命名空間是否使我免於此類問題,或者using指令是否仍能傳播文件邊框? https://stackoverflow.com/a/2577890/484230中 ,提出了類似的方法。 它是否也適用於匿名命名空間,它是否真的安全? 當然std是個壞例子,但是例如using namespace boost::assign; 在一些cpp文件中會很方便。

將它放在匿名命名空間中並將其放在一個命名空間之間沒有任何區別。 任何一個都產生相同的效果,這會將整個std命名空間帶入文件的頂級命名空間。 這不好,應該避免。

至於“傳播文件邊界”,如果你把它放在匿名命名空間之外也不會這樣做。 它唯一能夠感染其他文件的是它是否在其他文件中包含#include d的文件中,例如標題。

我的問題:匿名命名空間是否使我免於此類問題,或者using指令是否仍能傳播文件邊框?

指令傳播文件邊框的唯一方法是,如果某個其他文件具有#include "file.cpp"預處理程序指令。 這也是完全合法的,但不管怎么說,這很糟糕。 包含源文件而不是標題非常違反標准做法。

僅僅因為某些事情是合法的並不意味着它是好的。

幾乎是同樣適用於使用using帶來一些其他的命名空間到當前一個。 using namespace <name>; 即使在源文件中也被認為是不良形式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM