Chinaunix首页 | 论坛 | 博客
  • 博客访问: 150936
  • 博文数量: 31
  • 博客积分: 1455
  • 博客等级: 上尉
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-09 02:20
文章存档

2012年(2)

2011年(18)

2010年(11)

分类: C/C++

2011-11-17 10:15:13

auto不是一个新事物,在遥远的C年前就早已有之,它用来建议将一个变量放到寄存器里,这样可以加快运算速度。
然而,编译器早已聪明如斯,断然知道哪些变量放到寄存器比较好,
也断然不需要程序员指定变量为auto,
事实上,自从C语言有了auto,就没多少人用过!!

C++11给auto赋予新的内涵,用它来自动指定类型。
例如,您可以写
auto i = 1;
auto j = i * 2;
没有问题,i, j是什么类型,编译器会自动帮忙判断出来。

如果尝试写c++模板代码,立刻就会发现auto赋予程序员的无比快乐。
想下在C++ 98的年代的代码

  1. struct A
  2. {
  3.     typedef int Type;
  4.     int a;
  5.     int b;
  6. };

  7. struct B
  8. {
  9.    typedef double Type;
  10.    double a;
  11.    double b;
  12. };

  13. template<T>
  14. void some_func(T &t)
  15. {
  16.     typedef typename T::type Type;

  17.     Type c = t.a + t.b;
  18.     ....
  19. }

 

上面的代码里,我们这样做类型推导,为了得到不同的类A和B中的数据类型,
我们不得不用一些typedef, 一步步构想类型的来龙去脉,

最好,我们终于通过typedef得到了t.a和t.b的类型。
这是个简单的例子,当模板复杂时,事情通常变得烦复无比。
这分明不是在编程,分明是在当人肉编译器嘛。。
编程本应该是充满愉悦的事情,不应该被这些语言的纠纷所困扰。

在C++11里面,一个auto, 事情变得明朗起来。

  1. struct A
  2. {
  3.     int a;
  4.     int b;
  5. };

  6. struct B
  7. {
  8.    double a;
  9.    double b;
  10. };

  11. template<T>
  12. void some_func(T &t)
  13. {
  14.     auto c = t.a + t.b;
  15.     ....
  16. }


(转载请注明来自:nuvoton-m0.com)


 

阅读(1728) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~