最新要闻
- 还转投N卡阵营吗?国内AMD RX7900 XT货源开始变多 7599元起
- 最新资讯:本田真爱粉狂喜 全新思域两厢版上市:手动挡卖到16万
- 三只松鼠年货坚果礼盒大促:109立减60元 49包邮到手
- 高分天气应用Dark Sky即将关闭:苹果呼吁用户使用自带天气
- 天天新资讯:谷爱凌再创一新世界纪录:反脚1260板尾抓板女子世界第一
- 影响力无敌!梅西夺冠帖点赞量成Instagram史上第一:球衣被抢光
- 最纯净的国产手机系统!博主实测努比亚Z50系统广告默认关闭:世界清净了
- 环球观焦点:当AI作画入侵鬼畜区
- 全球时讯:不适合中国观众 只有《流浪地球2》?出品方:《阿凡达2》没理由不引进
- 质感绝了!一加11海外官宣:2月7日登场
- 【环球新要闻】SSD白菜价先别下单:有猫腻
- 民间大神用虚幻5自制《原神》 :这视觉效果爱了
- 【环球报资讯】曾经缔造玛雅文明!为什么玉米的产量世界第一?
- 深扒《阿凡达2》背后的故事:才是真的“细思恐极”!
- 【全球快播报】蔚来CEO李斌回应数据泄露问题 绝不会与不法行为妥协
- 全球热推荐:我去大疆新总部逛了逛:评测了有史以来最大的“产品”
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界视讯!Cpp Primer:Sec 4, 5, 6
- Sec4 表达式、逻辑和关系运算符
- Sec5 语句
- 5.1 简单语句
- 5.2 语句作用域
- 5.3 条件语句
- 5.4 迭代语句
- 5.6 try语句块和异常处理
- Sec6 函数
- 6.1 函数基础
- 6.2 参数传递
- 6.2.4 数组形参
- 6.2.5 main: 处理命令行选项
- 6.2.6 含有可变形参的函数
- 6.3 返回类型和returen语句
- 6.3.3 返回数组指针
- 6.4 函数重载 (重要)
- 6.5 特殊用途语言特性
- 6.5.3 调试帮助
- 6.6 函数匹配
- 重要!!C/C++类型声明黄金法则
- 6.7 函数指针
- null
Sec4 表达式、逻辑和关系运算符
&&
: 只有左边为真才对右边求值||
: 只有左边为假才对右边求值例子:
【资料图】
index != s.size() && !isspace(s[index])
首先检查index是否达到string对象的末尾,以此才确保只有当index在合理范围之内时,才会计算右侧运算对象的值
递增递减运算符
建议:除非必须,否则不用递增递减运算符的后置版本!!!
常用手法:
cout << *iter++ << endl;
条件运算符
cond ? expr1 : expr2
注意,该运算符的优先级非常低!移位运算符优先级不高不低。比算术运算符低,比关系运算符,赋值、条件运算符高
Sec5 语句
5.1 简单语句
- 空语句
- 分号的使用
- 复合语句compound statement
5.2 语句作用域
- if, switch, while和for语句的控制结构内定义变量。定义在控制结构当中的变量只在相应语句的内部可见
5.3 条件语句
- if-else
- switch记得写break和default别在case里面定义可能会跨case的变量!
5.4 迭代语句
while
for循环
for(init-statement; condition; expression) statement;
流程:先初始化,再判断条件,再执行statement,最后执行expression再判断条件,...,循环往复,直到不满足条件
(C++特性)范围for语句
for(declaration : expression) statement
其中,expression必须为一个序列!(有begin和end成员)declaration定义为一个变量,使得序列中的每个元素都能转换为该变量的类型。(常常用auto,而且引用是一个好习惯,引用后可以对expression中的序列写操作)
- 不能通过范围for语句增加vector对象,因为会存储end()值!!!要是增加就会变得无效了!
do-while语句
跳转语句
break语句
continueyuju
goto语句尽量别用
goto label;
labeled statement
5.6 try语句块和异常处理
C++的异常处理:
- throw:异常检测部分使用throw表达式来表示它遇到了无法处理的问题,我们说throw引发(raise)的异常
- try:异常处理部分使用try语句块处理异常。以try开始,以catch结束。(异常处理代码 exception handler)
- 一套异常类 exception class用于在throw表达式和相关的catch子句之间传递异常的具体信息
throw表达式
if(item1.isbn() != item2.isbn()) throw runtime_error("Data must refer to same ISBN");
try语句块
try{ program-statements} catch (exception-declaration) { handler-statements} catch (exception-declaration) { handler-statement;}
Sec6 函数
6.1 函数基础
- 分离式编译C++开发中广泛使用声明和实现分开的开发形式,其编译过程是分离式编译就是说各个cpp文件完全分开编译,然后生成各自的obj目标文件,最后通过链接器link生成一个可执行的exe文件。不需其他操作。
6.2 参数传递
形参的类型决定了形参和实参的交互方式
- 引用传递(passed by reference) 形参是引用类型引用形参也是它绑定对象的别名
- 值传递(passed by valued)形参和实参是两个独立的对象
- 指针形参注意函数内部可以通过指针的参数来改变外边的值了但只改变指针本身,不会影响外边
==
- 当用实参初始化形参的时候会忽略掉顶层const所以允许用字面值或者非常量,来初始化常量引用(标准是不要改变常量)
尽量使用常量引用
6.2.4 数组形参
管理方法
- 使用标记指定数组长度
- 使用标准库规范begin,end
- 显式传递一个表示数组大小的形参
数组形参和const当函数不需要对数组元素执行写操作,数组形参应该是指向const的指针
数组引用形参
f(int &arr[10]);// 错误,不存在引用的数组f(int (&arr)[10]);// 正确,arr是一个具有10个整数的整型数组的引用
多维数组
int *matrix[10];// 10个指针构成的数组int (*matrix)[10];// 指向含有10个整数的数组的指针
6.2.5 main: 处理命令行选项
int main(int argc, char *argv[])
argv为一个数组,元素是指向c风格字符串的指针。第一个形参为argc,是表示数组中字符串的数量!
命令: prog -d -o ofile data0argv[0]="prog";// 第一个元素指向程序的名字或者一个空字符串argv[1]="-d";// 饥饿下来的元素以此传递命令行提供的参数argv[2]="-o";argv[3]="ofile";argv[4]="data0";argv[5]=0;// 最后一个指针之后的元素保证为0
6.2.6 含有可变形参的函数
编写能处理不同数量实参的函数:
- 如果所有的实参类型相同,可以传递一个名为initializer_list的标准库类型
- 如果实参的类型不同,可以编写一种特殊的函数。即可变参数模板
initializer_list
一种标准库类型,用于表示某种特定类型的值的数组initializer_list
lst;// 默认初始化,T类型元素的空列表initializer_list lst{a,b,c...}// lst的元素数量和初始值一样多,lst的元素是对应初始值的副本,列表中迭代元素是constlst2(lst);// 拷贝或者赋值不回拷贝列表中的元素,而是原始列表和副本共享元素lst2 = lst;lst.size();lst.begin();lst.end(); initializer_list
永远是常量值省略符形参仅仅用于C于C++通用的类型!
void foo(parm_list,...); // 省略符之后的形参不会执行类型检查void foo(...);
6.3 返回类型和returen语句
返回
- 无返回值函数
- 有返回值函数
如何返回值返回的值用于初始化调用点的一个临时变量
返回的注意事项不要返回局部对象的引用或指针因为函数完成后,所占用的存储空间也随之被释放掉
const string &manip(){ string ret; if(!ret.empty()) return ret;// 错误,返回局部对象的引用 else return "empty";// 错误,empty是一个局部临时量}
返回类类型的函数和调用运算符调用运算符的优先级和点和箭头运算符相等。且符合左结合律
引用返回左值调用一个返回引用的函数得到左值,其他返回类型为右值
// 例子char &get_val(string &str, string::size_type ix){ return str[ix];}int main(){ string s("a value"); cout << s << endl; get_val(s, 0) = "A"; cout << s << endl; return 0;}
列表初始化返回值很好用。返回一个{}起来的值,然后用里面的值来初始化!
main的返回值
return EXIT_FAILURE;return EXIT_SUCCESS;
6.3.3 返回数组指针
函数可以返回数组的指针或者引用。
typedef int arrT[10];using arrT = int[10];arrT* func(int i);// func返回一个指向含有10个整数的数组的指针
int arr[10];int *p1[10];int (*p2)[10] = &arr;
或者直接定义
type (*function(parameter_list))[dimension]// 返回数组指针的函数
使用尾置返回类型trailing return type对返回值比较复杂的函数最有效
auto func(int i) -> int(*)[10];// 把函数返回类型放在->之后,并在前面用auto定义
或者用decltype
6.4 函数重载 (重要)
pass
6.5 特殊用途语言特性
三种函数相关的语言特性
默认实参一旦某个形参被赋予了默认值,它后面的所有形参都必须有默认值只能省略尾部的实参!!!
window = screen(,,"?");// 错误
而且给定的作用域中,一个形参只能被赋予一次默认实参只要表达式的类型可以转换为对应类型,该表达式就可以作为默认实参
内联函数
constexper
内联函数可以避免函数调用的开销
inline
constexper函数指能用于常量表达式(编译过程就能得到结果)的函数函数返回类型以及所有形参的类型都得是字面值类型,而且函数体中必须有且只有一条return语句会被隐式的展开为内联函数
建议把内联函数和constexper函数放在头文件里面
6.5.3 调试帮助
头文件保护
assert预处理宏preprocessor marco
assert(expr);
先对expr求值,如果expr为0,则输出信息并终止程序执行。如果为真,则啥也不做
NDEBUG预处理变量如果定义了 NDEBUG,则assert什么也不做。默认状态下没有定义NDEBUG,此时assert将执行运行时检查
// 对调试有用的名字__func____FILE____TIME____LINE____DATE__
6.6 函数匹配
void f();void f(int);void f(int, int);void f(double, double = 3.14);
确定候选函数和可行函数candidate function / viable function
寻找最佳匹配基本思想是,实参类型与形参类型越接近,匹配得越好
含有多个形参的函数匹配例如:
f(42,2.56)
可行函数为f(int,int), f(double, double)
确定最佳匹配的条件
- 该函数每个实参的匹配都不劣于其他可行函数所需要的匹配
- 至少有一个实参的匹配优于其他可行函数提供的匹配
故该调用具有二义性,拒绝并报错
实参类型转换
重要!!C/C++类型声明黄金法则
- 步骤:
- 找到变量名,若无变量名,则找到最里边的结构
- 向右看,读出你看到的东西,但是不要跳过括号!
- 再向左看,读出你看到的东西,但也不要跳过括号!
- 如果有括号,跳出一层括号
- 重复上述过程,直到读出最终类型
6.7 函数指针
// 比较两个string对象的长度bool lengthCompare(const string &, const string &);// pf指向一个函数,该函数的参数是两个const string的引用,返回值是bool类型bool (*pf)(const string &, const string &); // 未初始化
一定要写括号!如果不写的话,返回值就是一个指向bool类型的指针
使用函数指针当我们把函数名作为一个值使用的时候,该函数自动地转换成指针。
pf = func;pf = &func;// &是可选的。这两条是等价的,而且func应该是bool类型的!返回类型要一致// 调用bool b1 = pf("hello", "good");bool b2 = (*pf)("hello", "good");// 这两条也是等价的
重载函数的指针通过指针类型决定选用哪个函数。指针类型必须与重载函数中的某一个精确匹配
函数指针形参
void useBigger(const string &s1, const string &s2, bool pf(const string &, const string &))
可以用decltype和typedef来简化操作!
// Func和Func2是函数类型typedef bool Func(const string&, const string&);typedef decltype(lengthCompare) Func2;// 等价的类型// FuncP和FuncP2是指向函数的指针typedef bool (*FuncP)(const string&, const string&);typedef decltype(lengthCompare) *FuncP2;// 等价声明void useBigger(const string&, const string&, Func);// 自动将Func转换为指针void useBigger(const string&, const string&, FuncP2);// 等价
返回指向函数的指针|注意,不能返回一个函数!
using F = int(int*, int);// F为函数类型using PF = int(*)(int*, int);// PF为指针类型
PF f1(int);// 正确F f1(int);// 错误F *f1(int);// 正确,与第一条等价,返回为指向函数的指针auto f1(int) -> int (*)(int*, int);// 尾置返回类型
世界视讯!Cpp Primer:Sec 4, 5, 6
【当前独家】项目管理工具飞项傍身,居家办公效率“快人一步”
要闻:redis—安装以及可视化
还转投N卡阵营吗?国内AMD RX7900 XT货源开始变多 7599元起
最新资讯:本田真爱粉狂喜 全新思域两厢版上市:手动挡卖到16万
三只松鼠年货坚果礼盒大促:109立减60元 49包邮到手
高分天气应用Dark Sky即将关闭:苹果呼吁用户使用自带天气
天天新资讯:谷爱凌再创一新世界纪录:反脚1260板尾抓板女子世界第一
管理经验
环球速看:程序员面试找替身 “作弊” 入职,结果大快人心。。。
影响力无敌!梅西夺冠帖点赞量成Instagram史上第一:球衣被抢光
最纯净的国产手机系统!博主实测努比亚Z50系统广告默认关闭:世界清净了
环球观焦点:当AI作画入侵鬼畜区
全球时讯:不适合中国观众 只有《流浪地球2》?出品方:《阿凡达2》没理由不引进
质感绝了!一加11海外官宣:2月7日登场
【环球新要闻】SSD白菜价先别下单:有猫腻
世界动态:使用brew安装历史版本的几种方式
当前快讯:第一百一十六篇: JavaScript理解对象
世界微资讯!Python参数解析器configparser
民间大神用虚幻5自制《原神》 :这视觉效果爱了
【环球报资讯】曾经缔造玛雅文明!为什么玉米的产量世界第一?
深扒《阿凡达2》背后的故事:才是真的“细思恐极”!
【全球快播报】蔚来CEO李斌回应数据泄露问题 绝不会与不法行为妥协
全球热推荐:我去大疆新总部逛了逛:评测了有史以来最大的“产品”
焦点速递!Python unittest+ddt+openpyxl接口自动化
今日热讯:MAUI新生4.4-笔刷Brush
每日焦点!梅西晒怀抱大力神杯入睡照!淘宝同款奖杯被抢光
速讯:python + selenium实现gitlab全文搜索
热资讯!Codeforces 1763 F Edge Queries 题解
天天视讯!如何使用Yum History查找已安装或已删除的软件包信息
天天新消息丨混合场景
当前热议!神似梅西男子成网红 被民众围堵合影:这也太像了
分析师称《阿凡达2》难以回本:卡梅隆标准定太高了
2199元 掌阅Smart Air Pro电纸书上架:8寸大屏、300PPI显示
前端工程化Vue-cli
天天微头条丨Python unittest数据处理ddt
前端CSS Flex布局8大重难点知识,收藏起来吧
世界新消息丨django10 分页器与Form组件
【全球新要闻】FreeSWITCH学习笔记:XML配置文件
天天即时:怀旧情怀拉满:宾得宣布将开发新款胶片相机
阿根廷夺冠“拯救”伊利 但“奶茅”光环渐黯
环球快讯:一加宣布与OPPO服务融合:12月底全面加入OPPO售后服务系统
东北将迎今冬以来最强降雪:持续时间最长、范围最广
世界速递!框架第九课---ajax补充说明,多对多三种创建方式,django内置序列化组件(drf前身),ORM批量操作数据(ORM操作优化),自定义分页器,f
WPF工控组态软件之温度计
每日播报!Iceberg在袋鼠云的探索及实践
每日关注!hibernate validate工具,小心你的姿势不对
PCIe 5.0 SSD终于满血了!读写都是14GB/s、容量8TB
热消息:蔚来遭遇225万美元数据勒索 官方声明
当前讯息:铃木“大G”!吉姆尼五门版无伪谍照:最多能塞进7个人
奇迹!女子手机从26楼掉落未摔坏 真身竟是这款手机
5499元 联合创新推出新款32英寸显示器:4K MiniLED屏、144Hz高刷
“非洲之王”拥抱新技术:传音首台折叠屏手机已通过蓝牙SIG认证
天天短讯!世界北极熊之都升温过快 已危及北极熊生存:吃不上饭了
天天热资讯!深度学习炼丹-数据处理和增强
世界热门:记录--可视化大屏-用threejs撸一个3d中国地图
Python操作Excel(openpyxl)
全球热点评!Html5 canvas创意特效合集
即时看!1月1日起:澳门私家车可经港珠澳大桥出入内地
观速讯丨巡游大巴太高 梅西险些撞上电缆!他带回阿根廷的大力神杯居然是复制品
天天短讯!中国联通科技人才占比已达30% 曾发话不能再用老眼光看电信行业
空难曾致346人死亡 波音737 Max飞机延期采用最新安全标准
每日观察!广州多个外卖平台下单后配送慢 平台:员工已是全负荷工作
世界视讯!数据结构堆(Heap)&排序&二叉树
今日播报!用好这个任务管理工具,轻松躲避职场明枪暗箭
世界今日报丨彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-登录与图形验证码(captcha)EP06
今日热闻!低代码:如何成为企业业务价值提升的一大利器?
热消息:Intel第二代独立显卡1年后见:要追上RTX 4070!
主页不刷新了 小红书崩了累坏网友:WiFi、流量疯狂切换
罗永浩称他的失败不是理想主义的错 是他们自己的错
世界热讯:吴京《流浪地球2》吃苹果皮:大年初一上映
世界要闻:中国移动千兆宽带用户已达2.4亿!你是其中之一吗?
安全信息流工具-中文安全RSS小程序
supervisor+gunicorn+uvicorn部署fastapi项目
天天实时:四年保质期囤货无压力!900压缩饼干8斤85元
天天热资讯!iPhone 15系列或重新划分机型组合:14 Plus太拉胯 要大改
一加11质感绝了!刘作虎给员工秀真机:围观群众都发出WOW
美国“显卡税”又推迟9个月:一旦征收 最多涨价25%
全球讯息:大无语 车主称理想L9半个月坏三次 充电口从电动变手动
天天关注:企业转型难?火山引擎数智平台提供数智升级新路径
焦点热门:Dubbo架构设计与源码解析(一) 架构设计
Redis的AOF持久化
【报资讯】防火墙功能(锐捷安全篇)
当前热文:多方安全计算(4)MPC万能积木:秘密共享
【全球时快讯】多方安全计算(3)MPC万能钥匙:混淆电路
全力推进企业数智赋能发展主线,低代码任重道远
天天要闻:linux安装stable diffusion2.0完整教程-还不会安装sd2.0?一篇文章教会你AI绘画
焦点速读:proto IDL管理工具buf使用实践
P2329 栅栏
全球观点:Xml转Java实体类对象 xml转Javabena 对象 且多级嵌套 复杂嵌套
世界动态:用Python写一个一次性计算出加减乘除的运算小程序
世界热文:实验一:获取主机信息
全球播报:MySQL-InnoDB磁盘结构
今日热议:pkg对egg项目打包
天天精选!java的final关键字
环球快报:【验证码逆向专栏】某片滑块、点选验证码逆向分析
环球热议:别再用 JWT 作为 Session 系统了,问题重重,后果很危险!
全球球精选!Osx10.14升级watchman踩坑记
时讯:二分法
用Python来写个小型购物车程序