最新要闻
- 2021款宝马X5/X6正式上市 宝马X5售价区间69.99-85.99万元 宝马X6售价区间76.69-93.69万元
- 亚运版复兴号首次对外试乘:超帅“鹰隼”车头、5G+WiFi全覆盖
- 不只手机:13款华为路由器、手表、门锁也能升级HarmonyOS 4
- 《长安三万里》累计票房超16亿!中国影史动画电影票房第二
- 雅迪已连续6年问鼎全球电动两轮车销冠:冠能卖1500万台
- 5988元 神舟战神T7游戏本发布:酷睿i7+ RTX 3050
- 八一特别节目《征途如虹》
- 衡阳高新区领导现场调度阳光小学建设工作
- 气派科技(688216.SH):累计耗资2514.88万元回购0.96%股份
- 因驾驶车辆变道发生剐蹭,男子砸破他人车辆挡风玻璃,警方:已行拘
- 瞭望|数字经济潜力如何加快释放
- 原神4.0新圣遗物有什么 具体介绍
- 完爆众多新势力,刷新月销破万速度!“插混爆款”吉利银河L7,做对了什么? | 功夫汽车
- 伽蓝集团:匠心深耕,与美共生
- 云南省总工会开展“工会共建劳模林”义务植树活动
- 今起报名!宜昌市直部分事业单位公开遴选28人
手机

香港岭南大学:决定接受ChatGPT 将对教学人员和学生提供培训

大学生志愿者倾情奉献,新洲农家书屋变身留守儿童乐园
- 香港岭南大学:决定接受ChatGPT 将对教学人员和学生提供培训
- 大学生志愿者倾情奉献,新洲农家书屋变身留守儿童乐园
- 手机市场持续收缩 高通将裁员“过冬”
- 负债高征信花无逾期能下款的平台 这10个网贷通过率高,能轻松借钱
- 万控智造08月03日沪股通持有量51.02万股
- 老“网红”再现新创意
家电
《EffectiveC++》读书笔记(4):设计与声明
点击上方“C语言与CPP编程”,选择“关注/置顶/星标公众号”
干货福利,第一时间送达!
【资料图】
最近有小伙伴说没有收到当天的文章推送,这是因为微信改了推送机制,有一部分小伙伴刷不到当天的文章,一些比较实用的知识和信息,错过了就是错过了,建议大家加个星标⭐️,就能第一时间收到推送。
今天继续更新《Effective C++》和《C++并发编程实战》的读书笔记,下面是已经更新过的内容:
《C++并发编程实战》读书笔记(1):并发、线程管控
《C++并发编程实战》读书笔记(2):并发操作的同步
《C++并发编程实战》读书笔记(3):内存模型和原子操作
《C++并发编程实战》读书笔记(4):设计并发数据结构
《Effective C++》读书笔记(1):让自己习惯C++
《Effective C++》读书笔记(2):构造/析构/赋值运算
《Effective C++》读书笔记(3):资源管理
本文包括第6章设计基于锁的并发数据结构与第7章设计无锁数据结构,后者实在有些烧脑了。此外,发现吴天明版的中译本有太多太离谱的翻译错误了,还得是中英对照才行:)
条款18、让接口容易被正确使用,不易被误用
好的接口容易被正确使用,不易被误用;应使自己的所有接口努力达成这一点。
“容易被正确使用”的办法包括:
1、接口的一致性。例如STL的容器几乎都有类似的接口。
2、与内置类型行为类似。例如对于int类型来说a*b=c是非法的,那么自己定义的operator*也应该避免a*b=c的操作。
“不易被误用”的方法包括:
1、建立新类型。例如对于以int类型的年、月、日作为参数的接口来说,用户很可能搞混顺序(不同国家年月日的常用顺序不一),那么可以建立年类、月类、日类作为参数类型。
2、限制类型上的操作。例如令返回值为const,即可阻止用户写出“a*b=c”的代码。
3、限制对象值。例如参数像月份这样取值有限,即可使用枚举类或者预先定义一系列函数返回所有月份。
4、消除用户的资源管理责任。例如条款13中提过一个工厂方法:
如果只是返回一个裸指针,那么删除指针释放资源的责任就落在用户身上,而这常常会带来问题;如果把返回值改为shared_ptr,那么自动释放资源。
shared_ptr还有个性质是会使用每个指针专属的删除器。如果对象在一个DLL中被new创建而在另一个DLL内被delete,会引起运行期错误;而shared_ptr使用的删除器来自创建时所在的DLL,不存在上述问题。
条款19、设计class犹如设计type
当定义了一个新class,也就定义了一个新type。在定义一个新type前考虑以下问题:
新type的对象应该如何被创建和销毁?
对象的初始化和对象的赋值该有什么样的差别?
新type的对象如果被passed by value意味着什么?
什么是新type的合法值?
你的新type需要配合某些继承图系吗?
你的新type需要什么样的转换?
什么样的操作符和函数对此新type而言是合理的?
什么样的标准函数应该驳回?
谁该取用新type的成员?
什么是新type的未声明接口?
你的新type有多么一般化?
你真的需要一个新type吗?
条款20、宁以pass-by-reference-to-const替换pass-by-value
默认情况下C++以by value方式传参。这意味着函数参数都是由实参拷贝构造而来,调用端获得的也是函数返回值拷贝构造而来(不过有各种优化方式),多次拷贝的成本非常大。
C++中引用通常以指针来实现,传引用的成本相当低。因此,绝大多数情况下,用pass-by-reference-to-const替换pass-by-value更加高效。
此外,如果采用pass-by-value,如果误将派生类对象传给基类参数,那么派生类成员将被截断,仅留下基类成员;使用pass-by-reference-to-const即可避免这样的切割问题。
以上规则并不适用于内置类型以及STL的迭代器和函数对象,因为它们本质上很小,pass-by-value更适当。
条款21、必须返回对象时,别妄想返回其reference
虽然条款20中介绍了对于函数参数而言pass-by-reference-to-const相比pass-by-value的优势,但是对于函数返回值而言情况又不一样了。
当要返回的对象是一个局部栈对象时,函数退出后该对象就被销毁,无法通过指针或引用访问。因此函数返回值不能是指针或引用,必须是值传递。
当要返回的对象是函数内分配的堆对象时,如果返回的是堆对象的引用,那么函数退出后指针无法被删除,该堆对象无法被回收。因此需要返回堆对象的指针。
当返回的对象是局部静态变量的指针或引用时,如果程序的逻辑可能同时需要多个这样的对象,那么显然会出错:
正确的做法是:对于返回值而言,该用值传递是就用值传递
条款22、将成员变量声明为private
将成员变量声明为private有各种好处:
1、客户访问数据的一致性。客户只需记住用访问器函数来得到数据,无需考虑哪些是成员函数、那些是成员变量。
2、可细微划分访问控制。public成员全都可读可写,而private成员可以通过访问器、修改器的不同设置来控制读写权限。
3、为所有可能的实现提供弹性。private成员完全封装,日后完全可以在不影响用户使用的前提下被修改或替换。
protected并不比public更具封装性。假设取消一个已存在的protected/ic成员变量,那么所有派生类中使用到它的都需相应调整;而取消一个private成员变量则无需这样。
条款23、宁以non-member、non-friend替换member函数
越多成员被封装,则越少用户能访问它们,则修改它们时弹性就越大。而对于成员变量来说(首先应该是private),能访问它的函数越多,则其封装性越低。
那么,如果在成员函数与非成员/非友元函数之间抉择,并且两者提供相同的技能,那么非成员/非友元函数能访问的成员变量更少,封装性更强。
C++中比较自然的做法是选择clear_webbrowser而非WebBrowser::clear_all,并将其置于WebBrowser的命名空间中。
条款24、若所有参数皆需类型转换,请为此采用non-member函数
如果需要让某函数的所有参数都进行类型转换,包括this指针所指的参数,那么该函数必须是non-member的。
虽然让类支持隐式类型转换通常很糟糕,但有个例外是建立数值类型时:
当operator*是成员函数时,无法解决这样的代码:
对于有理数类的乘法,如果要支持字面量隐式转换为有理数对象,那么该类的operator*的所有参数都可能需要类型转换。因此成员函数无法解决这个问题,必须转为非成员函数:
条款25、考虑写出一个不抛异常的swap函数
swap函数目前已是异常安全性编程的脊柱(copy and swap写法)。
如果对于你的类/模板类来说,swap的默认实现的效率可接受,那么无需额外做什么;而如果默认实现的效率不足,通常源于类为了二进制兼容性使用了pimpl技法,就需要实现一个确保不抛出异常的swap:
1、首先,提供一个public的swap成员函数,让它高效地置换两个对象。
2、在类/模板类所在的命名空间提供一个non-member的swap,调用swap成员函数。
3、对于类(而非模板类),还需特化std::swap,调用swap成员函数。
4、真正使用swap时先声明using std::swap,再直接使用swap,让编译器寻找最合适的swap实现版本。
你好,我是飞宇,本硕均于某中流985 CS就读,先后于百度搜索以及字节跳动电商等部门担任Linux C/C++后端研发工程师。
同时,我也是知乎博主@韩飞宇,日常分享C/C++、计算机学习经验、工作体会,欢迎点击此处查看我以前的学习笔记&经验&分享的资源。
我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。
欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会。
加个微信,打开另一扇窗
关键词:
-
-
-
2021款宝马X5/X6正式上市 宝马X5售价区间69.99-85.99万元 宝马X6售价区间76.69-93.69万元
2021款宝马X5 X6正式上市,其中宝马X5(包括新能源车型)售价区间69 99-8
来源: -
《EffectiveC++》读书笔记(4):设计与声明
奔驰紧凑型SUV车型31万左右推荐,性价比高,这几款不要错过!
2021款宝马X5/X6正式上市 宝马X5售价区间69.99-85.99万元 宝马X6售价区间76.69-93.69万元
助工证怎么办理(助工证)
西方传出消息:俄罗斯工厂大范围停产!有一次证明我方明智!
香港岭南大学:决定接受ChatGPT 将对教学人员和学生提供培训
许家湖镇人大组织开展校园安全工作视察
央行:精准实施差别化住房信贷政策
带电的豪华之道 试驾奔驰EQE SUV
咨询一下 找黄牛代办证 已有一个半月 迟迟拿不到到证 也没说
真三国无双8赤兔马怎么获得(真三国无双8赤兔马怎么获得金手指)
驾驶证提前可以换证吗
大学生志愿者倾情奉献,新洲农家书屋变身留守儿童乐园
北京这位“铲车侠”找到了!说到这里,他眼中有了泪水
玻璃人登贝莱要去巴黎了,巴萨主帅哈维为啥如此不开心?原因如下
正是美联储想要的!美国银行业继续收紧信贷标准
亚运版复兴号首次对外试乘:超帅“鹰隼”车头、5G+WiFi全覆盖
手机市场持续收缩 高通将裁员“过冬”
不只手机:13款华为路由器、手表、门锁也能升级HarmonyOS 4
《长安三万里》累计票房超16亿!中国影史动画电影票房第二
雅迪已连续6年问鼎全球电动两轮车销冠:冠能卖1500万台
5988元 神舟战神T7游戏本发布:酷睿i7+ RTX 3050
陷入“深圳办公室被查”传闻后的恒瑞医药:严守合规底线
《揭秘NVIDIADPU&DOCA》第八讲上线!
小米米家智能音频眼镜全新墨镜款来了:899元
负债高征信花无逾期能下款的平台 这10个网贷通过率高,能轻松借钱
《逐梦》第二集《枪杆子永远听党指挥》
奥飞娱乐8月4日快速上涨
鹿邑县领导开展“八一”建军节走访慰问活动
雷电微力08月03日深股通持有量54.43万股
八一特别节目《征途如虹》
【公开市场操作】央行开展20亿7天期逆回购操作,中标利率1.9%,与上期持平(08-04)
万控智造08月03日沪股通持有量51.02万股
内蒙古赤峰:8月1日起执行住建部“认房不认贷”政策
我市首单“保农振兴贷”成功落地为农业生产经营主体提供无抵押融资服务
老“网红”再现新创意
青海油田:产能建设“全速奔跑”打开新局面
“空中王者”的起舞
海河流域上游主要河道水位平稳回落
欧元区7月通胀率为5.3%
微软朝销售软件巨头Salesforce进攻:单独披露竞对业务规模
嘉鱼县人大开展《咸宁市城市管理条例》实施情况专项检查暨2022年度创文专题询问整改落实情况座谈会
国家网信办就移动互联网未成年人模式建设指南征求意见
南华附一医院多学科专家赴洞口县人民医院展开对口支援工作
衡阳高新区领导现场调度阳光小学建设工作
昆虫世界中的丁香灌木为闺蜜寻遍天涯送上不凡礼物
马卡谈皇马和尤文赛后更衣室:前者使用大量冰袋,后者食物未动
将来1月,四大生肖转运成功,对生活有掌控力,东来紫气
梨果飘香富农家
“南京路上好八连”文献史料专题收藏展在长宁开展
中欧(厦门)班列出口破10万标箱 货值45亿余美元、产品逾千种
*ST慧辰(688500.SH):累计耗资1731.24万元回购1.4458%股份
气派科技(688216.SH):累计耗资2514.88万元回购0.96%股份
农行首席信息官蔡钊已任中国银行党委委员 或将出任中行副行长
保障国家惠民政策有效执行 最高检发布第四十六批指导性案例
腾讯追加捐赠1亿元,驰援抗汛救灾
因驾驶车辆变道发生剐蹭,男子砸破他人车辆挡风玻璃,警方:已行拘
瞭望|数字经济潜力如何加快释放
丽人丽妆(605136):8月4日技术指标出现观望信号-“黑三兵”
今日欧元/美元汇率交易策略(2023年8月3日)
沿黄小城的振兴故事:小产业带动大发展
多国上调光伏装机目标,光伏50ETF(159864)涨超1.3%,爱康科技涨超6%
【盘中播报】沪指跌0.12% 汽车行业跌幅最大
2023年8月8日全民健身日温州体育场馆免费开放情况汇总
大宋中医药文化市集在哪举行2023
中图网深夜发声:预计400多万册书报废,包括绝版老版书!总经理:只能等水退后再进库盘点、抢救
2023鱼台义务教育学校招生时间安排表
新视焰获得过亿元A轮投资,毅仁资本担任独家财务顾问
孙悦前妻照片被拿去相亲,移居美国住豪宅,36岁曼妙身材吸引眼球
沃尔与意大利米兰谈判:美记称球星暮年真悲惨 生涯赚2.76亿惨吗
呼和浩特公积金签订网签备案房屋租赁合同提取指南
乌鲁木齐迷笛音乐节门票价格(单日+双日)
新疆事业单位考试面试当场公布成绩吗
激光先进制造联合研究中心在清华大学揭牌
郭明錤:苹果iPhone15系列需求预计将低于iPhone14系列
苏丹卫生部长:受冲突影响 喀土穆州130家医院仅剩30家还在运转
亿点颜值暴击!《剑侠世界3》质感COS大片震撼发布
有趣!云南普洱亚洲象河中戏水降暑
硬核二次元游戏,究竟是不是个伪命题?
市域铁路南汇支线有新进展!下盐路站、东大公路站建设进入新阶段
美国财政部计划发债 1030 亿美元
【财通汽车】汽车板块观点推荐零部件板块持续推荐特斯
原神4.0新圣遗物有什么 具体介绍
完爆众多新势力,刷新月销破万速度!“插混爆款”吉利银河L7,做对了什么? | 功夫汽车
比亚迪跃居2023年《财富》世界500强第212位
警属张勤:这些年,我的幸福都来源于生活
台风“卡努”逼近 沿海掀起超20米巨浪
海外网友群嘲Faker,列举近几年数据,MSI六年无冠
万里扬股东户数增加5.68%,户均持股37.78万元
四季贵宾怎么使用?
信阳申洲医院:男人为何总感觉疲劳?吃些什么能缓解?
支付宝短视频计划引发“羊毛党”现象
国家减灾委、应急管理部针对河北严重洪涝灾害将国家救灾应急响应级别提升至Ⅲ级
江苏南通:11只同期现身,“神话之鸟”翩跹而至刷新纪录
深圳市龙华区大浪实验学校招生范围
上海市人社局出台事业单位高层次人才招聘办法和特设岗位管理办法
石家庄国省干线断交抢通两处
伽蓝集团:匠心深耕,与美共生
危险!后刘诗雯时代,王曼昱排名迎新低,巴黎奥运前景堪忧
31家北交所公司获机构调研