码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Effective C++ 阅读笔记 05:实现


    文章目录

    • 条款26:尽可能延后变量定义式的出现时间
      • 请记住
      • 我的理解
    • 条款27:尽量少做转型动作
      • 请记住
      • 我的理解
    • 条款28:不要返回一个指向对象内部的指针
      • 请记住
      • 我的理解
    • 条款29:为“异常安全”而努力是值得的
      • 请记住
      • 我的理解
    • 条款30:透彻了解inline的内内外外
      • 请记住
      • 我的理解
    • 条款31:将文件间的编译依存关系降至最低
      • 请记住
      • 我的理解

    条款26:尽可能延后变量定义式的出现时间

    请记住

    • 尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。

    我的理解

    除非是在该变量只在循环中被赋值,否则请延后变量声明的时间,越晚越好。


    条款27:尽量少做转型动作

    请记住

    • 如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_casts。如果有个设计需要转型动作,试着发展无需转型的替代设计。
    • 如果转型是必要的,试着将它隐藏于某个函数背后。客户随后可以调用该函数,而不需将转型放进他们自己的代码内。
    • 宁可使用C+±style(新式)转型,不要使用旧式转型。前者很容易辨识出来,而且也比较有着分门别类的执掌。

    我的理解

    C++提供四种新式转型,分别为:

    • const_cast:移除常量性
    • dynamic_cast:别用,消耗大
    • reinterpret_cast:低级转型,很少使用
    • static_cast:除了const转型外其余的转型用这个

    条款28:不要返回一个指向对象内部的指针

    请记住

    • 避免返回handles(包括reference、指针、迭代器)指向对象内部。遵守这个条款可增加封装性,帮助const成员函数的行为像个const,并将发生“虚吊号码牌”(dangling handles)的可能性降至最低。

    我的理解

    不要这么做,因为这么做会破坏封装,而且可能会出现对象被回收后,handles指向奇怪的位置


    条款29:为“异常安全”而努力是值得的

    请记住

    • 异常安全函数(Exception-safe functions)即使发生异常也不会泄漏资源或允许任何数据结构败坏。这样的函数区分为三种可能的保证:基本型、强烈型、不抛异常型。
    • “强烈保证”往往能够以copy-and-swap实现出来,但“强烈保证”并非对所有函数都可实现或具备现实意义。
    • 函数提供的“异常安全保证”通常最高只等于其所调用之各个函数的“异常安全保证”中的最弱者。

    我的理解

    保证,指的是如果成功,就是成功,如果失败,那么保持一致性,回复到失败前的状态。


    条款30:透彻了解inline的内内外外

    请记住

    • 将大多数inlining限制在小型、被频繁调用的函数身上。这可使日后的调试过程和二进制升级更容易,也可使潜在的代码膨胀问题最小化,是程序的速度提升机会最大化。
    • 不要只因为function templates出现在头文件,就将它们声明为inline。

    我的理解

    inline适用于较短的、经常被调用的函数,函数模板与inline没有直接关系


    条款31:将文件间的编译依存关系降至最低

    请记住

    • 支持“编译依存性最小化”的一般构想是:相依于声明式,不要相依于定义式。基于此构想的两个手段是Handle classes和Interface classes。
    • 程序库头文件应该以“完全且仅有声明式”(full and declaration-only forms)的形式存在。这种做法不论是否涉及templates都适用。

    我的理解

    重点是只声明,不定义,要做到这一点,要么用指针指向声明的类进行操作,要么用派生类继承进行操作,二者分别是Handle classes和Interface classes。


  • 相关阅读:
    Java实现拼图小游戏
    GO微服务实战第三十节 OpenTracing 规范介绍与分布式链路追踪组件选型
    Spring系列:基于XML的方式构建IOC
    Vue使用 dhtmlx-gantt 甘特图
    SpringCloud学习笔记(一)
    TypeScript数组的多种定义方式
    【优选算法系列】第一节.滑动窗口(209. 长度最小的子数组和3. 无重复字符的最长子串)
    如何正确使用GPT工具
    【100天精通Python】Day50:Python Web编程_Django框架从安装到使用
    基于labview滑动轴承压力测量软件搭建
  • 原文地址:https://blog.csdn.net/ShowMeTheCod3/article/details/126103755
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号