C++ 0x之auto – 从初始化中推断数据类型

作者: NickYang 分类: 技术文章,程序开发 发布时间: 2012-11-07 09:40
引言

曾几何时,C++ 0x出现在我们眼前,我们还在苦逼的用老的规则写代码,因为我们是码畜,我们的顶头上司要求我们必须用土的掉渣的VS2005来写代码,并且用各种存在很棘手问题的库,还有我们的用户都用的XP,新的库包含一些其他的内容,用户根本都没法用,所以我们依然苦逼着。不过曙光就在眼前了,虽然没看到曙光中的女神,但是先感谢下那帮为C++贡献终生的老头子们。

auto关键字的区分

当年我们学编程的时候记得还有一个auto关键字,是C++ 98标准的,是用来表明具有自动存储期的局部变量,不过这个自动存储期我是木有明白,这个关键字被打入冷宫了。现在那帮old men又重新启用了它,就像武则天和甄嬛一样(我又狗血了,为什么加一个又呢?)。

现在的auto关键字是用来做自动类型推演的,有点类似于类型萃取,不过比类型萃取更简单更好用。

auto详细

我们在用模板或者容器的时候经常都会写一大堆内容来将函数返回值赋值给某个相应的对象,然后用这个对象做一些操作,其实我们根本关心这个对象是什么类型,我们只是因为不那样写编译器不给通过而已,我们都是被逼的。而现在auto就可以帮我们解决这个烦恼,前面说过了,它的特点是自动类型推演,所以都交给它了。

例如,我们有如下的代码:

我们写了这么一坨代码,才实现了一个打印的功能,现在我们可以很简单的写了,连typdef都不用,(我认为typedef大多数时候的作用是为了迭代器,而不容器)。

简单的写法如下:

明显我们的代码量减少了,我们不是按照行数给钱的,所以不用担心代码减少了。

当然了它不仅仅使用在容器上,再看看下面的例子:

auto关键字的好处是解决了长期以来令我们头疼并且给我们带来麻烦的返回值数据类型问题。比如在一些复杂的模板函数里,你可以不用纠结这里到底用什么返回值的数据类型,大大的降低了复杂的数据类型的判断难度和代码量。

所以有高端并且简单的东西为何不用呢,与己方便与人方便嘛。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

3条评论
  • rangerlee

    2012 年 11 月 7 日 23:08

    看起来与boost::any差异不大,但是感觉看代码的人比较难受,很欣赏std::move和boost::ref

    畅言 火狐浏览器 GNU/Linux x64
    1. eliteYang

      2012 年 11 月 8 日 19:50

      不过这个东西用起来还是很爽的。哈哈……

      神话 火狐浏览器 Windows 7
    2. egmkang

      2012 年 11 月 17 日 13:27

      这个东西和boost any还不是一个概念.
      boost any是在库层面实现的一个东西, auto是在语言级别,准确的说是在编译时期,类型推导的结果.
      两者的性能完全不一样的,any要差很多,auto就跟手写类型,没有任何区别,甚至更快.
      🙂

      吐槽 火狐浏览器 Windows 7

发表评论

电子邮件地址不会被公开。 必填项已用*标注