C++入门3(C++新特性 using string auto)

news/2024/5/5 10:43:27/文章来源:https://blog.csdn.net/weixin_61785714/article/details/130459427

C++入门3

    • C++新特性
      • auto推导规则
      • auto 作为函数的形参类型
      • decltype
      • 基于范围for循环
    • typedef与using
      • C语言定义变量
      • typedef 在C语言中的写法
      • using在C++11中的写法
      • using与template的结合
    • string的简单使用

C++新特性

auto推导规则

auto类型推导: auto定义的变量,可以根据初始化的值,在编译时推导出变量名的类型。c11中auto不再表示存储类型指示符,auto定义变量时,该变量一定给与初始化。

int main(){auto x = 5; // l ok x 是int类型auto pi = new auto(1);// okpi被推导为int * ;const auto *xp = &x,u = 6;l// ok xp是const int*类型,u是const int类型static auto dx = 0.0;l // ok dx 是 doub1e类型auto int b;// error c11中auto不再表示存储类型指示符auto s ;// error没有初始化值 auto无法推导出s的类型

连在一起写,容易出现二义性,最好分开写

intmain({auto x = 5;// ok x 是int类型const auto *xp = &x,u;//?const auto *ip = &x,u = 6.0; //?return 0;
}

和指针引用结合起来使用,const结合

int main({int x = 0 ;auto *ip = &x;// ok ip ->int*,auto被推导为intauto xp = &x ;// ok xp -> int*  ,auto被推导为int*auto &c = x;// ok c -> int &,auto被推导为intauto d = x;// ok d -> int , auto被推导为intconst auto e = x;  ok e ->const int;autof = e;// okf -> int;const auto &g = x; // ok g -> const int &auto & h = g;// ok h -> const int &
}

auto 作为函数的形参类型

注意auto&x=ar,就是一个数组的别名,即
int(&br)[5]=ar; auto 推导为int[5];他们等价

void func(auto x){cout << sizeof(x) << endl ;cout << typeid(x ).name() << endl ;
}
int mainO{int a = 10;int ar[]={12,23,34,45,56};func(a);//  4 intfunc(ar);// 4 int*    退化成指针
}
//**************************************
void func(auto &x){cout << sizeof(x) << endl ;cout << typeid(x).name( << endl ;
}
int main({int a = 10;int ar[={12,23,34,45,56};func(a);//4  intfunc(ar);//20  int [5]

注意:auto 不能在结构体使用,auto无法定义数组;

int main(){int ar[10]={0};auto br=ar;//br->int*auto cr[10]=ar;//error   auto dr[5]={1,2,3,4,5};//error

decltype

exp表示一个表达式(expression) 。
从格式上来看,decltype很像sizeof-—用来推导表达式类型大小的操作符。类似于sizeof,decltype 的推导过程是在编译期完成的,并且不会真正计算表达式的值。

int main({int x = 10;decltype(x) y = 1;// y => intdecltype(x+y) z = 0; // y = int;const int &i = x;decitype(i)j= y;// j = const int & ;const dec1type(z) *p = &z;//*p => const int , p = const int *dec1type (z) *ip = &z; // *ip => int , ip => int *dec1type(pi) *pp = &ip // *pp => int *,pp => int ;

基于范围for循环

for(ElemType val : array){..// statement循环体
}

ElemType 一般写成auto,让编译器自己推演,array是容器或者数组,不能是结构体
容器有vector array list map unordered_map set unordered_set

int main(){int ar[]={1,2,3,4,5,6,7,8,9,10};int*p=ar;auto&x=ar;//等价int(&br)[10]=ar;int(&br)[10]=ar;//下面哪个不能编译通过:for(auto&val:p){}//error:后面必须是数组或者容器for(auto&val:x){}//x是ar的别名for(auto&val:br){}//br是ar的别名

核心用法,可以打印一个二维数组

int main(){int ar[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};for(auto&x:ar){//x就是一个数组的别名for(auto val:x){cout<<val<<endl;}}
}

打印了三个地址

int main() {int ar[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };for (auto x : ar) {//x是一个地址,ar[0]  ar[1]  ar[2]cout << x<<' ';cout << endl;}
}

typedef与using

C语言定义变量

typedef 可以把一切合法的变量的定义改成类型名

struct Node{char s_id[10];int s_age
}
struct Node Node;
unsigned int u_int;
int array[10];
int* PINT;
int (*pfun)(int) ;

可以把结构体合二为一

typedef struct Node{char s_id[10];int s_age
}Node;

typedef 在C语言中的写法

typedef struct Node{char s_id[10];int s_age
}
typedef unsigned int u_int;
typedef int array[10];
typedef int* PINT;
typedef int (*pfun)(int) ;
typedef struct Node Node;
int main ()
{u_int x,y;array ar,br;PINT xp,yp;pfun pf1,pf2;Node n1,n2;
}

using在C++11中的写法

typedef struct Node{char s_id[10];int s_age
}
using u_int= unsigned int ;
using array= int[10];
using PINT=int*;
uisng pfun=int(*)(int) ;//函数指针
using Node=struct Node;
int main ()
{u_int x,y;array ar,br;PINT xp,yp;pfun pf1,pf2;Node n1,n2;
}

using与template的结合

<>里面是什么类型,就定义什么类型的指针

template<class T>
using Pointer=T*;
int main(){int a=10;Pointer<int>p=&a;//p是整型指针return 0;
}

string的简单使用

在其他文章里详细介绍了C++常用的字符串:
链接: C++字符串

int main(){char str[20]={"yhping"};str[0]='x';const char str1="yhping";
int main (){char stra[20] = "yhping" ;char strb[20] = "yhping";const char* cp1 = "yhping" ;const const*cp2 = "yhping";cout<<(stra == strb) << endl ;cout<< (cp1==cp2) << endl;return 0;

输出答案为0 1
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_296913.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言单链表

本节目标&#xff1a; ①定义单链表结构体 ②初始化单链表 ③单链表增加结点&#xff08;头插法、尾插法&#xff09; ④删除指定结点 ⑤打印输出 目录 导入头文件 定义单链表结构体 初始化单链表 头插法 尾插法插入 删除指定结点 打印单链表 全部代码展示 导入头文件 …

中文大模型安全性哪家强?清华团队新发布

当前大型语言模型的火爆程度我们不用再进行赘述了&#xff0c;伴随着百度文心一言打响国内商业大模型第一枪&#xff0c;华为盘古&#xff0c;阿里通义千问&#xff0c;智谱ChatGLM,科大讯飞星火等国内公司纷纷开始布局。 另一方面由于众所周知的政策原因&#xff0c;和如火如荼…

5 分钟教你如何免费用上 GPT-4

今天要分享的就是普通用户&#xff0c;没有 OpenAI 账号&#xff0c;不需要写代码&#xff0c;你依然可以免费体验 GPT-4&#xff0c;当然&#xff0c;会有一些缺点&#xff0c;本篇文章将会手把手教你怎么用上免费版的 GPT-4 以及它的一些限制。 第一步&#xff1a;打开 Stea…

Threejs进阶之十三:CSS3DRenderer与Tween.js实现粒子小球按规律变化

今天我们使用CSS3DRendererTween.js实现Threejs官方示例中的粒子小球按规律变化的效果&#xff0c;先看下最终实现的效果 先来分析下&#xff0c;这个页面的动画效果是由512个小球组合起来的四种不同变化&#xff0c;分别是曲面、立方体、随机和圆球四种变化&#xff1b;下面我…

UDP的报文结构

UDP 报文结构 基本上所有的教科书上都是这样画的图, 但实际上 UDP 报文结构不是这样的, 这样显示应该是容易排版. 正确应该如下图 : 端口号 : 每个端口号在 UDP 报文里占两个字节, 取值范围就是: 0 ~ 65535 源 ip 和源端口描述了数据从哪里来, 目的 ip 和目的端口描述了数据去哪…

文本的清洗和标准化:如何处理混乱的数据?

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

操作系统考试复习—第三章 优先级倒置 死锁问题

当前OS广泛采用优先级调度算法和抢占方式&#xff0c;然而在系统中存在着影响进程运行的资源从而可能产生"优先级倒置"现象 具体解释为&#xff1a;在原本的调度算法设计中&#xff0c;高优先级进程可以抢占低优先级的CPU资源&#xff0c;先执行高优先级任务。但是存…

x265码控分析

D和R的关系 高分辨率量化 均匀量化&#xff1a;量化区间 ‘ Δ k y k − y k − 1 ‘ \Delta_ky_k-y_{k-1} ‘Δk​yk​−yk−1​‘&#xff0c;近似为常数&#xff1b;p(x)为信源概率密度函数&#xff0c;且 ‘ Δ k ‘ \Delta_k ‘Δk​‘的大小相对于p(x)的变化率充分小&…

电力NLP:指令票规范识别

文章目录 任务目的想法讲解数据集介绍1电气主语2操作任务判断数据集3操作内容判断数据集4错误词数据集 解法讲解程序、数据集下载链接 任务目的 识别调度指令票&#xff08;或者其它操作票&#xff09;是否规范。 想法讲解 按石第2014—16号定值单投入石双西线161开关6区保护…

突发!ChatGPT王炸级更新!支持GPT-4联网 Code Interpreter!

4月30日&#xff0c;OpenAI官方悄悄发布了联网版GPT-3.5。虽然名字变了&#xff0c;但使用体验却是换汤不换药&#xff0c;还是那套。 然而&#xff0c;万万没想到的是&#xff0c;刚过去没几天&#xff0c;昨天5月4日&#xff0c;鱼哥发现自己的Plus账号竟然多了一些能力&…

树莓派硬件介绍及配件选择

目录 树莓派Datasheet下载地址&#xff1a; Raspberry 4B 外观图&#xff1a; 技术规格书&#xff1a; 性能介绍&#xff1a; 树莓派配件选用 电源的选用&#xff1a; 树莓派外壳选用&#xff1a; 内存卡/U盘选用 树莓派Datasheet下载地址&#xff1a; Raspberry Pi …

C++11多线程:std::thread创建线程和std::async创建异步任务的区别,std::async创建异步任务后没有被推迟执行。

系列文章目录 文章目录 系列文章目录前言一、thread和async的区别1.1 新线程和异步任务1.2 std::async和std::thread最明显的不同&#xff0c;就是async有时候并不创建新线程。1.3 std::async和std::thread的区别1.4 std::async不确定性问题的解决 二、使用方法2.1 std::async创…

JVM学习随笔02——虚拟机内存区组成与内存溢出异常

一、Java虚拟机内存区组成图 1、程序计数器&#xff1a; 每个线程独占一个计数器&#xff0c;用来指示该线程下一条要执行的指令的地址。这一部分不会导致内存异常。PS&#xff1a;如果一个线程进入的是一般的Java方法&#xff0c;计数器指示的是下一条指令地址&#xff1b;如果…

浅谈“孔乙己”的长衫

书中的孔乙己 孔乙已是鲁迅笔下人物&#xff0c;穷困流倒还穿着象征读书人的长衫&#xff0c;迁腐、麻木。最近&#xff0c;大家自我调佩是“当代孔乙己”&#xff0c;学历成为思想负担&#xff0c;找工作时高不成低不就。 当代的“孔乙己” 如今社会&#xff0c;从小学开始每…

C# 学习abstract

abstract 顾名思义&#xff1a;抽象 从微软官方文档来看&#xff1a;abstract 修饰符指示被修改内容的实现已丢失或不完整。 abstract 修饰符可用于类、方法、属性、索引和事件。 在类声明中使用 abstract 修饰符来指示某个类仅用作其他类的基类&#xff0c;而不用于自行进行…

L4公司进军辅助驾驶,放话无图也能跑遍中国

作者 | Amy 编辑 | 德新 高阶智能驾驶走向规模量产&#xff0c;高精地图成为关键的门槛之一。今年&#xff0c;多家车企和智驾公司都喊出「不依赖高精地图&#xff0c;快速大规模落地」的口号。 华为、小鹏、元戎以及毫末等&#xff0c;可能是最快在国内量产 无高精图智…

服务器的基本概念与初始Ajax

1. 客户端与服务器 1.1 上网的目的 刷微博、看新闻、听歌、看电影。。。 本质目的&#xff1a;通过互联网的形式来获取和消费资源 1.2 服务器 上网过程中&#xff0c;负责存放和对外提供资源的电脑&#xff0c;叫做服务器。 1.3 客户端 上网过程中&#xff0c;负责获取…

nginx(七十三)nginx与Location响应头细节探讨

一 nginx与Location响应头细节探讨 ① 重定向和Location回顾 多种重定向跳转方式的差异 nginx之absolute_redirect、server_name_in_redirect、port_in_redirect 共同控制Location响应头 ② STS响应头导致307重定向 "第一次访问 http://www.baidu.com" 观察…

个人博客系统调试详细过程

系统功能的详细说明和源代码见以下链接:https://blog.csdn.net/shooter7/article/details/121180333相关的源码数据库文件、软件安装包可以联系博主koukou(壹壹23七2五六98) 调试过程如下&#xff1a; 文章目录 调试过程如下&#xff1a;一、数据库安装二、sql数据文件的导入三…

yolov5图像识别voc转yolo代码解析

https://github.com/ultralytics/JSON2YOLO https://blog.csdn.net/qq_51831335/article/details/127237772 目标检测数据集标签转换COCO2VOC、YOLO2VOC、JSON2YOLO <annotation><folder>VOC2007</folder><filename>000001.jpg</filename><s…