C++11之auto与decltype

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的类型

结合

autodecltype两个放在一起,威力就大了,许多STL中的模板都是类似如下使用:

template< typename T1, typename T2>
  auto add(const T1 &t1, const T2 &t2) -> decltype(t1+t2){
    return t1 + t2;
  }