栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

##C11

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

##C11

auto

auto的用法,可以根据变量值,推出变量类型,其中比较特殊的就是cosnt引用用法

int main()

{ 

   const int a=10;

    auto x=a;// x int

     auto& y=a;  //auto就是const int & 类型

}

     错误用法:auto&y=a,u=a;  //这个时候u就不能编译通过,必须是 auto& y=a,&u =a;

c++真的需要对内存,cpu,缓存应用非常到位。推荐书籍《深入了解计算机》第一章,第六章,第九章学习。

小结:如果使用auto&引用或者指针时就会继承变量的const或者v(易变)特性。

auto可以作为函数的形参 数组结构体不能使用auto

decltype关键字

也可以用它来推演,与auto不同,auto所修饰的变量必须被初始化,编译器需要通过初始化来确定auto所代表的类型,即必须要定义变量。

可以使用表达式来推演函数类型。

const int & Add(int a,int b)

{

   return a;

} 

int main()

{ 

    auto x=10;  //x=int;

     decltype(x) y;  //y= int;

     decltype(x+y) z;//int ;

    decltype(Add(1,2)) c=x;  // int &

}

//如果是使用指针

const int *Add(int a)

 {

     return &a;

}

decltype(Add(1)) c=&x;

所以可以获得变量类型,表达式类型还有函数返回值类型。

基于范围的for用法

基于范围的for 写法:

for(ELemptype val:array)

{

   ...//statement

}

ElemType:是范围变量的数据类型。必须与数组(容器)元素的数据类型一样,或者是数组元素可以自动转换过来的类型。

val:是范围变量的名称。该变量将在循环迭代期间依次接收数组中的元素值。在第一次循环迭代期间,它接收的是第一个元素的值;在第二次循环迭代期间,它接收的是第二个元素的值;依次类推。

array:是要让该循环进行处理的数组(容器)的名称。该循环将对数组中的每个元素迭代一次。

statement 循环体内容 continue结束一次循环,break跳出整个大循环等都可以使用。

int main()
{
  int ar[]={1,2,3,4,5,6,7};

for (int val:ar)
{
   cout< 

好处:不需要划定范围   坏处:不能跳着输出每个元素值

可以与引用结合  减少使用空间

struct Student

{   int s_age;

    char s_addr[200];

}

int main()

{

    struct Student studx[10]={};

    for(const auto &x:studx)

{

}

}

auto与范围for与数组的结合:

void Print(auto &x)   //可以推出数组的类型,大小

{

   for(const auto& val:x)   //推出数组元素类型

{

    cout<< val<<" "; 

}

cout <

}

int main()

{

   char str[]={"yhping"};

  int ar[]={1,2,3,4,5};

  double dx[]{1.2,2.3,3.4,4.5,5.6};

Print(str);

Print(ar);

Print(dx);

}

 注意:可千万不能这样写

int *p=ar;

for(int&x:p)

{

}  //因为p是指针,并不是容器,for无法确定容器范围

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/932224.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号