C++ using的使用

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!!!没啥好说的!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值