如何解决函数体内部的 using 指令和函数体外部的其他指令有什么区别?
AFAIK a using directive
将命名空间中的所有名称注入最近的封闭命名空间范围。这是一个我不明白其中区别的示例:
namespace Exercise {
int ivar = 0;
double dvar = 0;
const int limit = 1000;
}
// using namespace Exercise;
void manip() {
using namespace Exercise;
++ivar;
++::ivar;
}
考虑命名空间 Exercise
和函数 manip
是在全局命名空间范围内定义的。在我看来,函数体内的 using 指令将命名空间 Exercise
中的所有三个成员名称注入全局作用域,并且正好在函数 manip
的定义之前,所以就好像它是这样的:
int ivar = 0; // injected here
double dvar = 0; // injected here
const int limit = 1000; // injected here
// using namespace Exercise;
void manip() {
using namespace Exercise;
++ivar; // ok using Exercise::ivar
++::ivar; // error? 'error: ‘::ivar’ has not been declared; did you mean ‘Exercise::ivar’?
-
那么为什么
++::ivar
编译失败,只要该名称已经注入全局命名空间? -
对我来说重要的是:如果我取消注释函数
manip
主体之外的第一个 using 指令,那么代码编译得很好,编译器不会抱怨这样的表达式:++::ivar
?
那么这两个 using directives
有什么区别?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。