using 关键字的作用
using声明---using declaration
就是声明一个已经存在的命名空间,命名空间成员,枚举,类成员对象等。
声明实现的原理
在 C++ 中,变量的声明并不等于变量的实现,变量声明只是告诉编译器该变量的名称、类型和作用域等信息。在程序编译的过程中,编译器只是为所声明的变量分配一些符号表中的空间,这个空间仅仅用于连接、重定位等编译过程中需要的信息。
在链接时,链接程序会根据符号表中保存的变量信息去查找具体的变量实现,如果找到了,将会把变量实现和符号表中的变量绑定在一起,最终生成可执行文件。如果链接程序没有找到变量的具体实现,将会出现链接错误。
本质上就是告诉编译器有这么一个东西存在。
using的几个作用
1,声明命名空间
声明一个命名空间之后就可以使用这个命名空间的所有成员。
2,声明命名空间中的成员
3,声明枚举
enum class test{
...
};
using enum test;
4,在派生类中声明基类成员
class A{
public:
struct m_a{};
};
class B:public A{
public:
using A::m_a;
};
5,别名
using的注意事项
1,using声明的类成员必须是一个类型,不能是一个变量对象;
#include <iostream>
class H{
public:
int h_a;
};
2,using在任意处声明类的成员类型时,必须指定别名。
原因:
如果如同以下:
class A{
public:
struct m_a{};
enum class m_e{};
};
using A::m_a;
using A::m_e;
m_a a1;
m_e e1;
m_a和m_e的作用域是限定在类A中的,如果如同以上的写法,那么m_a和m_e就脱离类A独自成立了,这是不对的。
所以必须使用别名来表示声明m_a和m_e属于类A.
链接