Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

using声明、using指示及其作用域详解 #30

Open
2 tasks
Durant35 opened this issue Sep 3, 2018 · 2 comments
Open
2 tasks

using声明、using指示及其作用域详解 #30

Durant35 opened this issue Sep 3, 2018 · 2 comments

Comments

@Durant35
Copy link
Owner

Durant35 commented Sep 3, 2018

@Durant35
Copy link
Owner Author

Durant35 commented Sep 3, 2018

using 声明 ==> 可以使用

  • 一个using声明一次只能引入一个命名空间成员,从using声明点开始,直到包含该using声明的作用域结尾
  • 声明的名字仅仅在该作用域是可见的,外部作用域中相同的名字被屏蔽
  • 它可以出现在全局作用域,局部作用域或者命名空间作用域中
  • 类中的using声明局限于使用其基类中定义的名字???
  • 一定记住using声明是局部的,它涉及到的作用域只有一个,就是从using声明点开始,直到包含该using声明的作用域结尾,别无他处

@Durant35
Copy link
Owner Author

Durant35 commented Sep 3, 2018

using指示 ==> 不推荐使用

  • using指示使得特定命名空间的所有名字可见,从using指示点开始(这点同using声明一致),对名字可以不加限定符使用,直到包含using指示的作用域的末尾
  • using指示具有将命名空间成员提升到包含命名空间本身using指示的最近作用域的效果???
    • using指示的最近作用域中的作用域指的就是”从using指示点开始,直到包含using指示的作用域的末尾“ 这样的一个作用域
//头文件 named_namespace.h
 
#ifndef NAME_17_2_3
#define NAME_17_2_3
namespace name_17_2_3
{
  class AA
  {
    AA() {}
  };
  extern int name_17_2_3_fun(); //声明
  extern int i; //声明
}
#endif
 
//实现文件 named_namespace.cpp
#include "named_namespace.h"
namespace name_17_2_3
{
  int name_17_2_3_fun() //定义
  {
    return 998;
  }
  int i; //定义
}
#include <iostream>
#include "named_namespace.h" //将命名空间name_17_2_3插入到当前位置,也就是全局作用域,相当于在此处定义命名空间;
 
using namespace std;
using namespace name_17_2_3;  //using指示,处于全局作用域,;
int i = 200; //全局变量;
int main()
{
  //using namespace name_17_2_3;
  cout << "i=" << i << endl; //调用哪一个 i 呢?编译器不知道应该使用哪个变量 i;
 
  return 0;
}
  • 不管将using指示写在main内部还是外部,都将把name_17_2_3的所有成员引入全局作用域,因为name_17_2_3被#include指令插入到了全局作用域,相当于在全局作用域定义
  • 虽然如此,只有在using指示点以后才能够以短格式即不带限定符使用这些成员

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant