1. 介绍
C++11标准中,我们不需要指定变量的类型,编译器会自动完成这份工作。这篇短文简要介绍auto
和decltype
的用法。
2. auto和decltype的用法
我们可以将变量声明为auto
类型,下面是一下简单数据类型变量的例子:
1
2
3
auto i = 10;
auto ch = 'a';
auto f = 9.2f;
在我们在迭代STL的容器时,需要声明迭代器类型,这在之前是十分冗长的,但是在C++11中,我们可以使用auto
进行简化:
1
2
3
4
5
//c++11之前
std::vector<std::string>::iterator i = v.begin();
//c++11
auto i =v.begin();
decltype有着相同的编程模式,但它不是作用在一个变量的类型上。通过使用decltype,我们可以会获得一个表达式结果的类型,接着我们可以将该类型绑定一个名字。
1
2
3
4
5
6
//声明一个字符创列表
vector<string> names;
//为上述列表声明一个迭代器类型
typedef decltype(names.begin()) name_it;
//服用这个声明的类型
name_it another;
3. using的用法
在上面的例子中。我们使用typedef
为names.begin()
的类型定义类型别名,其实在C++11中,我们还可以使用using
来为已知类型定义类型别名,例子如下:
1
2
3
typedef int I;
//上一句等价于下一句
using I = int;
故而,我们可以将typedef decltype (names.begin()) name_it;
替换为using name_it = decltype (names.begin());
。
同样的,我们也可以使用using
语句为函数指针定义类型别名,例子如下:
1
2
3
using func = void (*) (int, int);
//上一句等价于下一句
typedef void (*func)(int, int);