什么是 C++ 中的类型别名和 using 声明?
类型别名与using都是为了提高代码的可读性。
有两种方法可以定义类型别名
- 一种是使用关键字typedef起别名
- 使用别名声明来定义类型的别名,即使用using.
typedef
关键字typedef作为声明语句中的基本数据类型的一部分出现。含有typedef的声明语句定义的不再是变量而是类型别名。和以前的声明语句一样,这里的声明符也可以包含类型修饰,从而也能由基本数据类型构造出复合类型来。
类型别名允许我们为已存在的类型创建一个新的名称。这在处理复杂的类型表达式时特别有用,可以使代码更清晰、更易于理解。
typedef的用法包括:定义一种类型的别名;用于struct声明;用来定义与平台无关的类型;用于回调函数;为复杂的声明定义一个新的简单的别名。
typedef是定义了一种类型的新别名,不同于宏,并不是简单的字符串替换。
过度使用:虽然类型别名可以提高代码的可读性,但过度使用可能会导致代码混乱,特别是当别名含义不明确时
// 使用typedef进行类型别名定义
typedef int Integer;
Integer a = 10; // 等价于 int a = 10;
using
C++11中用关键字using作为别名声明的开始,其后紧跟别名和等号,其作用是把等号左侧的名字规定成等号右侧类型的别名。
using
声明不仅用于类型别名,还可以用来引入命名空间中的标识符,或者明确指定类成员的访问方式。
using int Interger
Interger b=20//int b=20
使用typedef定义的别名和使用using定义的别名在语义上是等效的。 唯一的区别是typedef在模板中有一定的局限性,而using没有。
注意事项:
- 具体引入:尽量使用
using std::cout;
这样的具体引入,而不是using namespace std;
。 - 局部作用域:如果必须使用
using namespace
,将其限制在局部作用域内。
using namespace std;
#include<iostream>
using namespace std;
int main(){
int a;
cin>>a;
cout<<a;
}
#include<iostream>
int main(){
int a;
std::cin>>a;
std::cout<<a;
}