美文网首页C++2.0
c++11 之auto 关键字

c++11 之auto 关键字

作者: 小pb | 来源:发表于2018-04-11 19:26 被阅读13次

原文转自:https://blog.csdn.net/pleasecallmewhy/article/details/34941721 根据自己的理解稍作改动,希望不会会错其意。

C++ 11中引入的auto主要有两种用途:自动类型推断和返回值占位,auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作(主要是为了少些代码)。

当你想要遍历STL容器中元素的时候,想一想你会怎么写迭代器代码,老式的方法是用很多typedef来做,而auto则会大大简化这个过程。

     std::map<std::string, std::vector<int>> map;
     for(auto it = begin(map); it != end(map); ++it) 
     {
     }

另外,在使用模板技术时,如果某个变量的类型依赖于模板参数,不使用auto将很难确定变量的类型(使用auto后,将由编译器自动进行确定)。下面是一个具体的例子。

    template <class T, class U>    
    void Multiply(T t, U u)    
    {    
          auto v = t*u;    
    }  

auto返回值占位,这种用法要与decltype配合使用,用于返回值类型后置时的占位。

   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

你应该注意到,auto并不能作为函数的返回类型,他是配合decltype 来进行模板函数的编写的,但是你可以用auto 去接收 函数的返回值。接收的auto不会告诉编译器去推断返回值的实际类型,它会通知编译器在函数的末段去寻找返回值类型.

自动化推导decltype
关于 decltype 是一个操作符,其可以评估括号内表达式的类型,其规则如下:

  1. 如果表达式e是一个变量,那么就是这个变量的类型

     typedef decltype (vi.begin()) CIT; 
    
  2. 如果表达式e是一个函数,那么就是这个函数返回值的类型。上面的例子也适用于这个规则。

  3. 如果不符合1和2,如果e是左值,类型为T,那么decltype(e)是T&;如果是右值,则是T。
    还有一个适合的用法是用来typedef函数指针,也会省很多事。

       decltype(&myfunc) pfunc = 0;  
       typedef decltype(&A::func1) type;  

相关文章

  • C++11中auto和decltype

    C++11中auto和decltype auto和decltype都是C++11中引进来用于自动推断类型的关键字,...

  • C++11拾穗

    C++11新关键字 alignas:指定对齐大小 alignof:获取对齐大小 decltype auto(重新定...

  • 阿里巴巴面试题基础篇 C++11

    ● 请问C++11有哪些新特性? 参考回答: C++11 最常用的新特性如下: auto关键字:编译器可以根据初始...

  • 关键字 Auto

    Auto 关键字作用 在阅读了《深入应用C++11 代码优化与工程级应用》的第一张第一节之后,对auto关键字的认...

  • C++11/14/17新特性

    C++11/14/17常用特性 关键字 auto 让编译器根据上下文情况,确定auto变量的真正类型,可以作为函数...

  • c++11 之auto 关键字

    原文转自:https://blog.csdn.net/pleasecallmewhy/article/detail...

  • C++11:auto

    auto这个关键字在C++11之前就存在的,只不过当时它的含义是指明对象的存储期。这个用途在C++11中已经删除了...

  • c++ 11~20 新特性速查

    持续更新中。。。 c++11 std::auto (c++11) raw string (c++11) std::...

  • C++11的类型推导详解

    auto & decltype 关于C++11新特性,最先提到的肯定是类型推导,C++11引入了auto和decl...

  • C++11之auto

    此前,在C和C++中使用参数必须明确的指出其类型。比如: 在新标准中,通过关键字auto可以实现替代类型说明。比如...

网友评论

本文标题:c++11 之auto 关键字

本文链接:https://www.haomeiwen.com/subject/unvzhftx.html