簡體   English   中英

匿名命名空間內的“using namespace”語句

[英]“using namespace” statement inside an anonymous namespace

在匿名命名using namespace內使用using namespace語句時,將using namespace空間帶入文件范圍? 例如:

namespace foo
{
    int f() { return 1; }
}
namespace
{
    using namespace foo;
}
int a()
{
    return f(); // Will this compile?
}

根據7.3.4 [namespace.udir]第4段,命名空間指令是可傳遞的:

對於非限定查找,指定第二個名稱空間本身包含using-directives,效果就好像第二個名稱空間中的using-directives也出現在第一個名稱空間中。

...並且根據7.3.1.1 [namespace.unnamed]第1段,對於未命名的命名空間有一種隱式的using指令:

未命名的命名空間定義的行為就像被替換為

內聯命名空間唯一{/ *空體* /}
使用namespace唯一;
namespace unique {namespace-body}

當且僅當它出現在unnamed-namespace-definition中時,inline才會出現,翻譯單元中所有出現的unique都會被相同的標識符替換,並且此標識符與整個程序中的所有其他標識符不同。

因此,答案是“是的,這應該編譯”(並且它與我嘗試過的所有C ++編譯器一樣)。

是。

這是因為匿名命名空間會自動進入包含范圍。

是的,因為正如DietmarKühl所引用的那樣,匿名命名空間被其內容所取代。

但是,你應該注意它被確切地替換為聲明 (編輯)的位置,所以這里沒有“魔法”。 例如,這不起作用:

namespace foo
{
    int f() { return 1; }
}

int a()
{
    return f(); // Will this compile?
}

namespace
{
    using namespace foo;
}

暫無
暫無

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

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