文章目录
1. 简介
在 C++ 中,using
是一个非常有用的关键字,主要用于两个重要的场景:命名空间(Namespace
)的使用和类型别名(Type Alias
)的创建。它能够在一定程度上简化代码书写,同时也提供了更灵活的类型定义方式。
2. 使用
2.1 using声明(using <namespace>::<identifier>)
这是一种精确的引入方式。例如using std::cout,它告诉编译器,在当前作用域内,可以直接使用std命名空间中的cout这个标识符,而不需要每次都使用完整的std::cout限定符。从语法定义上讲,它是在声明一个来自特定命名空间的特定名字在当前作用域是可见的。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream> // 引用头文件
using namespace std;//标准命名空间
namespace Maker {
int a = 10;
int b = 20;
int c = 30;
}
void test() {
// using声明(using <namespace>::<identifier>)
using Maker::a;
cout << "Maker::a = " << a << endl;
}
int main(){
test();
return 0;
}
输出结果:
Maker::a = 10
如果我再次在test
方法里面定义一个int a = 10;
会怎么样呢?
居然报错了,这里using
的使用,已经相当于在这个局部定义了一个int a
,再次声明一个当然会报错了。
2.1 using指令(using namespace <namespace>)
例如using namespace std,这是一种比较宽泛的方式。它的定义是让指定命名空间中的所有标识符在当前作用域内都可以直接使用,就好像这些标识符是在当前作用域中定义的一样。这种方式在方便的同时也带来了潜在的命名冲突风险,因为它一次性引入了整个命名空间的所有内容。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream> // 引用头文件
using namespace std;//标准命名空间
namespace Maker {
int a = 10;
int b = 20;
int c = 30;
}
void test() {
// using指令(using namespace <namespace>)
using namespace Maker;
cout << "Maker::a = " << a << endl;
int a = 20;
}
int main(){
test();
return 0;
}
输出结果:
Maker::a = 10
这里就没有报错,这里使用using
在这个方法中相当于在全局定义了一个int a,再次定义的话,不会报错。
2.3 using用于类型别名(Type Alias)方面的定义
从语法定义上看,using
用于类型别名是一种创建新类型名来指代现有类型的方式。
例如using MyInt = int;
,这里using
关键字后面跟着新的类型别名(MyInt
),再通过=指定它所代表的实际类型(int
)。这种定义方式使得MyInt
在后续的代码中可以完全替代int
来使用,包括定义变量、函数参数类型、返回值类型等。
对于模板类型别名,如template <typename T> using MyVector = std::vector<T>;
,定义了一个模板类型别名。其中template <typename T>
表明这是一个模板定义部分,using MyVector = std::vector<T>
表示当提供一个具体的模板参数T时,MyVector<T>
就等价于std::vector<T>
,它为复杂的模板类型提供了一种简洁的引用方式。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream> // 引用头文件
using namespace std;//标准命名空间
struct Maker2 {
char name[64];
int age;
};
void test() {
// using用于类型别名(Type Alias)方面的定义
using MyMaker = struct Maker2;
MyMaker my = { "20202", 18 };
cout << "我的名字:" << my.name << endl << "我的年龄:" << my.age << endl;
}
int main(){
test();
return 0;
}
输出结果:
我的名字:20202
我的年龄:18
顺便提一下,struct
在C++中进行了增强,所以直接使用Maker2
就可以,不用加上struct
这个关键字
3. 总结
so easy!!!没啥好说的!!!