C++ 11 实用特性总结
auto
C++11新引入的auto是一个十分好用的特性,它的用途主要是自动类型推断和返回值占位。
- 自动类型推断
auto可以从表达式中推断出“返回值类型”,这里一定要有一个具体的表达式,然后根据表达式计算出结果,将结果返回给auto类型的变量。
int main(){
auto a; //错误,无法推断出a的类型
auto a=10; //正确,可以推断出a的类型(这里有一个疑问,a的类型究竟是int还是long long?难道它能自动扩展类型吗?目前我还没测试,感觉应该是编译器在编译的时候自动确定a的类型的,不然这岂不成了一个bug?)
}
auto的自动类型推断有两个显著优点,其一是可以省去思考变量类型,程序员可以直接将变量定义为auto类型。其二是可以简化过长的类型,例子如下所示。
int main(){
map<int, map<int,int> > map_;
map<int, map<int,int>>::const_iterator itr1 = map_.begin();
const auto itr2 = map_.begin();
auto ptr = []()
{
std::cout << "hello world" << std::endl;
};
}
- 返回值占位
可以将函数的返回值类型设置为auto,如下所示。
int main{
template <typename T1, typename T2>
auto compose(T1 t1, T2 t2) -> decltype(t1 + t2)
{
return t1+t2;
}
auto v = compose(2, 3.14); // v's type is double
}