"using namespace"匿名命名空间内的语句
"using namespace" statement inside an anonymous 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指令的第二个命名空间,其效果就像来自第二个名称空间的using指令也出现在第一个命名空间中一样。
根据7.3.1.1[namespace.namename]第1段,有一种针对未命名命名空间的隐式使用指令:
未命名的名称空间定义的行为就像被取代一样
内联命名空间唯一{/*空正文*/}
使用命名空间唯一
命名空间唯一{命名空间主体}其中inline出现当且仅当它出现在未命名的命名空间定义中时,翻译单元中所有出现的unique都被相同的标识符替换,并且该标识符不同于整个程序中的所有其他标识符。
因此,答案是"是的,这应该是编译的"(我尝试过的所有C++编译器都是这样)。
是。
这是因为匿名命名空间会自动进入包含范围。
是的,因为正如Dietmar Kühl所引用的,匿名命名空间被其内容所取代。
但是,您应该注意,它被替换为声明(编辑)的位置,所以这里面没有"魔法"。例如,这不起作用:
namespace foo
{
int f() { return 1; }
}
int a()
{
return f(); // Will this compile?
}
namespace
{
using namespace foo;
}
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- 为什么在语句"std::cout << std::endl;"中使用时需要命名空间限定,给定依赖于参数的查找?
- "using namespace"匿名命名空间内的语句
- 为什么语句不能出现在命名空间范围内
- 命名空间中的If语句给出错误
- 执行PyImport_ImportModule和import语句加载到不同的命名空间
- 将using语句应用于函数的返回类型,而不应用于整个命名空间