找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

C++中两个很少用到但很好用的关键字!!!

admin 2019-7-15 19:54 137人围观 C++相关

这篇文章是突然想写的一篇杂文。

想和大家介绍一下C++中很有趣的两个关键字,auto和decltype。

auto是类型说明符C++关键字,它的作用是让编译器通过所赋的值去声明一个变量。
    用法如下


    auto item=val1+val2;auto &item1=val1+val2;

    如果val1+val2的和是int型,item就是int型。如果和是double型,item就是double型。它的用法和变量声明差不多,auto+"空格"+变量名。但是在它后面需要有值可以赋值给它。

    如果在编译器中,直接auto声明变量然后不赋值,就会出现“[Error] declaration of 'auto str' has no initializer”这样的语句。

    以上是auto的简单使用方法。



    下面介绍一下decltype,它是类型指示符C++关键字。

    它的用处是返回操作数的数据类型,并且声明变量。如下


      constint a;double b;decltype(a) x=0;//放回a的类型,也就是const int 类型decltype(b) y=1.2;//放回b的类型,double类型

      还有一个小点就是decltype(())的使用,括号里带有括号,

        int i=0;int o=2;decltype((i)) x;//错误,decltype((i))返回int类型的引用,需要初始化decltype((i)) y=o;//正确,y是int类型的引用,初始化为o的引用decltype(i) z;//正确decltype((i));//返回int类型,z可以不初始化
        这就是decltype的作用和用法。



        再来讲讲这篇文好玩的地方,for范围语句。这个和for循环一样的关键字有着其他的作用,配合起auto用起来简直方便。

          for(declaration:expression) statement
          expression是一个对象,declaration定义一个变量,该变量用于访问对象中所以的基础元素,如字符、整数等。栗子:

            string str="Hello world";for(auto s:str){cout<<s<<endl;}
            现在明白为什么auto有用了吧?因为在你不知道str的类型是什么,直接一个auto上去,加个变量分号,就可以遍历整个字符串,数组等。

            当你需要批量修改元素的数据时候,可以给declaration,也就是变量用引用类型。栗子如下:
              vector<int> v{1,2,3,4,5,6,7,8,9};for(auto &num:v){ num+=1;}for(auto num:v){cout<<num<<endl;}
              会分行打印出加了1之后的每个元素,也就是:从2到10。

              auto也可以配合迭代器使用⬇

                for(auto it=v.begin();it!=end();it++){//操作}


                结语:auto和decltype两个关键字可以在我们不知道变量的数据类型的时候创建一个与之一样的变量。并且auto配合for范围语句可以更加减少代码量,也更加直观去表达出代码的意思。是不是感觉这样写起来代码可以方便,直接许多了呢?

                觉得不错的话,在看关注走一波?




                ----------------------------------------------------------------------------------------------------------------------
                我们尊重原创,也注重分享,文章来源于微信公众号:甲醛实验室,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
                ----------------------------------------------------------------------------------------------------------------------

                鲜花

                握手

                雷人

                路过

                鸡蛋

                yafeilinux和他的朋友们微信公众号二维码

                微信公众号

                专注于Qt嵌入式Linux开发等。扫一扫立即关注。

                Qt开源社区官方QQ群二维码

                QQ交流群

                欢迎加入QQ群大家庭,一起讨论学习!

                我有话说......