[英]“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.