设为首页 加入收藏

TOP

C++11新特性:自动类型推断和类型获取
2014-11-24 02:01:53 来源: 作者: 【 】 浏览:1
Tags:特性 自动 类型 推断 获取

自动类型推断


当编译器能够在一个变量的声明时候就推断出它的类型,那么你就能够用auto关键字来作为他们的类型:


auto x = 1;


编译器当然知道x是integer类型的。所以你就不用int了。接触过泛型编程或者API编程的人大概可以猜出自动类型推断是做什么用的了:帮你省去大量冗长的类型声明语句。


比如下面这个例子:


在原来的C++中,你要想使用vector的迭代器得这么写:


vector vec;
vector::iterator itr = vec.iterator();


看起来就很不爽。现在你可以这么写了:


vector vec;
auto itr = vec.iterator();


果断简洁多了吧。假如说自动类型推断只有这样的用法的话那未免也太naive了。在很多情况下它还能提供更深层次的便利。


比如说有这样的代码:


template
void
makeAndProcessObject (const Builder& builder)
{
BuiltType val = builder.makeObject();
// do stuff with val
}


这个函数的功能是要使用builder的makeObject产生的实例来进行某些操作。但是现在引入了泛型编程。builder的类型不同,那么makeObject返回的类型也不同,那么我们这里就得引入两个泛型。看起来很复杂是吧,所以这里就可以使用自动类型推断来简化操作:


template
void
makeAndProcessObject (const Builder& builder)
{
auto val = builder.makeObject();
// do stuff with val
}


因为在得之builder的类型之后,编译器就已经能知道makeObject的返回值类型了。所以我们能够让编译器自动去推断val的类型。这样一来就省去了一个泛型。


你以为自动类型推断只有这样的用法?那也太naive了。C++11还允许对函数的返回值进行类型推断



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Qt5 中对 C++11 一些新特性的封装 下一篇用socketpair()进行进程间的全双..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: