c++11 auto关键词和基于范围的for循环

文章目录

    • 1.说明
    • 2.例子

1.说明

  • 为啥把他们放在一起呢?因为我认为他们都给编程人员提供了编码的便利,编码量减少。
  • 基于范围的for循环就是以前的for循环简化版
  • auto是类型推导,让使用者获得动态语言的使用体验;但是有区别,那就是auto声明的变量类型,你可以不知道,但是编译器一定要知道,这样才不会报错。
  • 程序调试运行在clion2019.3版本,c++11环境下

2.例子

1.auto

int x;
auto y;//报错,这个y未初始化,所以编译器也不知道auto声明的这个y是什么类型,也就不能自动推导出来。
  • auto常用于容器的iterator的推导,省了好多字。
  • auto不能用在函数参数内的类型推导,原因也是参数被调用的时候才会传入,初始化,而auto要求写下的时候编译器就能判断出来要推导的类型。
void fun(auto a)//错误的用法
{
     
}

2.综合例子

#include 
#include 

int main() {
     

    std::array<int,4> a={
     0,1,2,3};
    std::array<int,4>::iterator it = a.begin();
    for(;it != a.end(); it++)
    {
     
        std::cout<<(*it)<<std::endl;
    }

    for (int i = 0; i < a.size(); ++i) {
     
        std::cout<<a[i]<<std::endl;
    }

    for(int x:a)//基于for的范围遍历,少写了不少字,主要是将范围暗暗隐藏在内,不用写了
    {
     
        std::cout<<x<<std::endl;
    }
    for(auto x:a)
    {
     
        std::cout<<x<<std::endl;
    }

    auto it_1 = a.begin();//比较前面便利多了
    auto test = 1;
    std::cout<<it_1<<std::endl;
    std::cout<<test<<std::endl;

    return 0;
}

3.可见c++设计者开始注意为开发者提供便利,c++11自带线程库就是又一佐证。

后面可能会补充说明这些新特性编译器是怎么实现的。。。

你可能感兴趣的:(c++学习总结,c++11,auto用法,基于范围的for循环,c++11新特性)