zoukankan      html  css  js  c++  java
  • auto用法

    在C++11中,如果编译器在定义一个变量的时候可以推断出变量的类型,不用写变量的类型,你只需写auto即可。

    第一种用法:自动推到内置类型

    int x = 100;
    //C++ 11
    auto x = 100;

    第二种用法:自动推导模版和迭代器类型

    vector<int> vec;
    auto iter = vec.iterator();

    第三种用法:用于模版

    template <typename BuiltType, typename Builder>
    void makeAndProcessObject(cosnt Builder& builder)
    {
        BuiltType val = builder.makeObject();  
        //do something 
    }

    上面的代码,我们看到这里需要两个模板参数:一个是Builder对象的类型,另一个是Builder创建出的对象的类型。糟糕的是创建出的类型无法被推导出,所以每次你必须这样调用:

    MyObjBuilder builder;
    makeAndProcessObject<MyObjBuilder>(builder);

    使用C++ 11后的修改为:

    template <typename Builder>
    void makeAndProcessObject(const Builder& builder)
    {
         auto val = bulder.makeObject();
         //...    
    }
    
    MyObjBuilder builder;
    makeAndProcessObject(builder);
    

    auto:引用、指针和常量

    下面要确定的一个问题是auto如何处理引用:

    int& foo()
    auto bar = foo(); //int& or int  

    答案是在C++11中,auto处理引用时默认是值类型,所以下面的代码bar是int。不过你可以指定&作为修饰符强制它作为引用:

    int& foo();
    auto bar = foo(); // int
    auto& baz = foo(); //int&  

    不过,假如你有一个指针auto则自动获取指针类型:

    int* foo();
    auto p_bar = foo(); // int*

    但是你也可以显式指定表明变量是一个指针:

    int* foo();
    auto *p_bar = foo(); // int*  

    当处理引用时,你一样可以标记const,如果需要的话:

    int& foo();
    const auto& baz = foo(); //const int&  

    或者指针:

    int* foo();
    const int* const_foo();
    const auto *p_bar = foo(); // const int*  
    auto p_bar = const_foo();  // const int* 
    

      

    原文博客: http://towriting.com/blog/2013/08/08/improved-type-inference-in-cpp11/

  • 相关阅读:
    页面上有10个多选框,实现三个按钮(重置、反选、全选)功能
    鼠标点哪 哪出15*15的圆型div
    es写简单的留言板
    面试准备(3)事件循环
    面试准备(2)async+await的使用与原理
    面试准备(1)重排与重绘和验证码
    vue项目修改el-input样式
    echarts画雷达图详解
    决心
    国庆中秋
  • 原文地址:https://www.cnblogs.com/ThatsMyTiger/p/7084710.html
Copyright © 2011-2022 走看看