C++11之auto
2018-06-13 本文已影响0人
Hard模式
cpp11_auto.png
此前,在C和C++中使用参数必须明确的指出其类型。比如:
int i = 5;
char c = "a";
double d = 0.5;
在新标准中,通过关键字auto可以实现替代类型说明。比如:
auto a = 5; // a为int类型
auto a = "a"; // a为char类型
auto a = 0.5; // a为double类型
这样的代码是不是有点“无类型”的感觉?但实际上,编译器根据初始化代码,自动完成了变量的真实类型推导。
auto的引入使得程序更为简洁,而且由于类型推导是在编译阶段进行的,程序的实际运行效率不受影响。
再来看一个更明显的例子:
vector<int> iv;
auto itr = iv.begin();
对比一下之前的写法:
vector<int> iv;
vector<int>::const_iterator itr = iv.begin();
另一个更有用的场景
对于模板编程的中间变量,auto的引入也可简化编程的工作,使代码更清晰。
template <typename T1, typename T2>
void foo(const T1& t)
{
T2* tmp = t.init();
// ...
}
使用auto后,
template <typename T1>
void foo(const T1& t)
{
auto tmp = t.init();
// ...
}