auto
看介绍,auto
实际上是在编译期间就对变量进行了类型推导,所以在程序的实际运行过程中不会对运行效率产生影响.因此可以说auto
就类似一个占位符,只不过在编译期间被替换为实际的类型.
auto
最大的作用应该就是将代码变得简洁,易读.比如在使用迭代器的时候,通常需要写一大串的类型,而此时只需要使用auto
即可:
for (std::vector<int>::const_iterator itr = myvec.cbegin(); itr != myvec.cend(); ++itr)
//使用auto
for (auto itr = myvec.cbegin(); itr != myvec.cend(); ++itr)
但是最好不要在接收函数的返回值时使用auto
,这会降低代码的可读性:
sometype var = func_xxx(var);
auto var = func_xxx(var);
decltype
decltype
可以在编译期间确定表达式的类型,比如:
int v1;
decltype(v1) v2; //返回v1的类型
结合
将auto
和decltype
两个放在一起,威力就大了,许多STL中的模板都是类似如下使用:
template< typename T1, typename T2>
auto add(const T1 &t1, const T2 &t2) -> decltype(t1+t2){
return t1 + t2;
}