effective c++读书笔记 条款3

《Effective C++》 读书笔记(详细总结55条款)上篇 下面从四个方面来说 (1) C++ 以 C 为基础,很多语句语法都没有改变,只是进行了扩展,C++ 解决问题的时候,可以理解为 C 的高效解法 (2) 面向对象,有构造函数,析构函数,继承、封装、多态、虚函数动态绑定,这是不同于C 语言的部分 (3) 泛型编程、可以理解为代码的模型,但是代码本身并不占用内存空间,只有在实例化的时候,才分配内存,所以可以提高代码复用性 阅读详情
#ifndef Clause3_H
#define Clause3_H

//条款3 尽可能使用const

**//知识点1 将某些东西声明为const可以帮助编译器侦测出错误用法。
const可以被施加于任何作用域内的对象,函数参数,函数返回类型,成员函数本体。**

//修饰指针时:

char greeting[]="hello";
char *p=greeting; //non-const pointer,non-const data
const char * p1=greeting;//non-const pointer,const data
char * const p2=greeting;//const pointer,non-const data
const char * const p3=greeting;//const pointer,const data

//如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量。

//STL迭代器:以指针为根据塑性模型出来。

std::vector<int> vec;
const std::vector<int>::iterator iter;//iter表现得像一个T* const
std::vector<int>::const_iterator CIter;//citer表现得像一个const T*

//用于函数声明时的应用,令函数返回一个常量值,往往可以降低因客户错误而造成的意外

class Rational
{
public:
    const Rational operator*(const Rational& lhs,const Rational& rhs);
};
Rational a,b,c;
void fun()
{
    if(a*b=c)//防止这个没意思的赋值。
        ;
}

//知识点2 编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性还有待理解

//知识点3 当const 和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可以避免重复

class TextBlock{
public:
    const char& operator[](std::size_t position) const
    {
        //边界检验
        //日志数据访问
        //检验数据完整性
        return text[position];
    }
    char& operator[](std::size_t position) 
    {
        //边界检验
        //日志数据访问
        //检验数据完整性
        return text[position];
    }

private:
    std::string text;
};
//上述代码重复了大部分,所以我们想用一个替换另一个。
//我们应该做的是实现operator[]机能一次并且使用它两次。也就是说
//我们必须令其中一个调用另一个。这促使我们将常量性移除。
class TextBlock{
public:
    const char& operator[](std::size_t position) const
    {
        //边界检验
        //日志数据访问
        //检验数据完整性
        return text[position];
    }
    char& operator[](std::size_t position) 
    {

        return
            const_cast<char&>(                       //将op[]返回值的const转除
                static_cast<const TextBlock&>(*this) //为*this加上const
                    [position]                      //调用const op[]
            );
    }

private:
    std::string text;
};

//一些解释:添加const的那一次转型强迫进行了一次安全转型(将non-const对象转为const对象)
//所以我们使用static_cast。移除const的那个动作只可以藉由const_cast完成,没有其他选择。

//反向做法–令const版本调用non-const版本以避免重复–并不是我们应该做的事。

#endif
Effective C++ 条款36:绝不重新定义继承而来的 non-virtual 函数 深入解析 Effective C++ 条款36,理解为什么不应该重新定义继承而来的 non-virtual 函数,掌握静态绑定与动态绑定的本质区别,避免面向对象设计中的常见陷阱。 阅读详情

相关推荐

【绝版C++书籍】《Effective STL》读书笔记

《Effective STL》读书笔记写在前面《Effective STL》中可能过时的内容1 容器第1条:慎重选择容器类型。第2条:不要试图编写独立于容器类型的代码。第3条:确保容器中的对象拷贝正确而高效。第4条:调用empty而不是检查size()是否为0。第5条:区间成员函数优先于与之对应的单元素成员函数。第6条:当心C++编译器最烦人的分析机制。第7条:如果入容器中包含了通过new操作创建的指针,切记在容器对象析构前将delete掉。第8条:切勿创建包含auto_ptr的容器对象。第9条:慎重选择删

Elias_Liu的博客 1757

《Effective C++》条款03(尽可能的使用const)

条款03 尽可能的使用const const出现形式 const关键字形式多种多样,对于普通变量的使用其规则就很多,如下图所示: const关键字总结:const关键字出现在“ * ”号左边,表示被指对象为常量,如果const出现在“ * ”右边,表示指针自身为常量;如果const关键字即出现在“ * ”左边又出现在“ * ”右边,那么指针和被指对象都是常量。 如下表示的指针情况相同: STL中的常量迭代器和指向常量的迭代器 形如指针和const结合一样,迭代器也有两种版本,分别是指向常量的迭代器和常量

qq_44664843的博客 295

Effective C++ 条款01:视 C++ 为一个语言联邦

这篇文章摘要: C++是一个由多个次语言组成的语言联邦,包括C风格过程式编程、面向对象的C++、模板元编程和STL标准库。作者通过《Effective C++》第一条指出,理解这种联邦结构是掌握C++的关键。文章详细解析了这四大次语言的核心特性和适用场景:C语言基础用于系统编程;面向对象特性适合大型架构;模板编程支持泛型和元编程;STL提供了容器和算法的高效实现。不同次语言的编程规则差异很大,混合使用时需要注意风格统一。文章通过嵌入式系统、游戏引擎等实际案例,展示了如何根据不同需求选择合适的次语言组合。理解

凡人叶枫的博客 786

《Effective c++》 条款3:尽可能的使用const

           const就是常量的意思,如果你做过题,你应该会碰过下面的物种情况,没碰到也没关系,看看区中有什么区别? char greeting []="hello"; char *p=greeting; //non-const pointer,non-const data const char *p=greeting; //non-const ...

码农的博客 359

LM Studio Bionic:本地AI智能体从部署到实战完整指南

AI智能体作为能够自主规划、执行多步任务的人工智能系统,其核心原理在于结合大语言模型的推理能力与工具调用机制。通过状态保持和任务分解算法,智能体实现了从单次问答到持续协作的技术跃迁。在工程实践中,这种架构显著降低了复杂任务自动化的门槛,特别适用于数据敏感场景和定制化需求。以Tesla V100等专业硬件为例,本地部署能充分发挥其大显存优势,支持更高精度的模型量化格式。在实际应用层面,智能体可无缝集成到代码审查、文档生成等开发工作流中,而LM Studio Bionic通过统一界面整合了模型服务、任务规划器等

weixin_29053695的博客 649

【程序化天空盒】过程记录01:日月 天空渐变 大气散射

在做一个仿照原神的天空盒,写文章作为技术总结和记录。

qq_41835314的博客 6741

effective C++ 条款三 解读

条款三 尽可能的使用const const 的主要用途可以分为三个方面: 1.用于修饰指针 2.const迭代器 3.函数声明时的应用(返回值  参数  函数自身) 用于修饰指针 能够区分一下代码:char greeting[]="Hello"; char* p=greeting; const char* p=greeting; const char* const p =greeting

weixin_38911779的博客 312

【AirSim+PX4】WSL2上运行PX4连接Airsim步骤

在 Linux 命令行中输入以下命令以添加(或改变)环境变量。注意,此处的 IP 地址应为。4.启动 sln 文件的调试以进入 UE4 编辑器,并在 Linux 中启动 PX4。

m0_53538421的博客 1505

《effective C++》条款三

尽量使用new和delete而不用

u010462274的专栏 538

Arcgis中的模型构建器(ModelBuilder)技术之批量图层转KML

这段时间全省各地都在开展耕地流出图斑整改恢复工作,期间或多或少都需要村委会协助摸排举证,除了举证软件外,奥维、外业精灵等软件想必大家接触得也很多。这就经常需要我们转kmz文件给业主或者摸排人员,那么有没有什么方法在arcgis下快速批量转kmz文件呢,今天就介绍一下如何在模型构建器(ModelBuilder)构建批量图层转KML的模型。

weixin_44671081的博客 1324

基于Python的电商平台商品价格监控与历史价格查询系统

随着电子商务的快速发展,消费者对商品价格透明度的需求日益增长。本文设计并实现了一个基于Python的电商平台商品价格监控与历史价格查询系统,能够自动抓取京东和淘宝商品信息,存储历史价格数据,并通过可视化界面展示价格走势。系统采用最新的异步爬虫技术、反爬虫绕过策略和现代Web框架,实现了高效稳定的数据采集与展示功能。关键词:Python爬虫、价格监控、历史价格、数据可视化、异步爬虫、电商平台实现了京东和淘宝商品信息的异步爬取,采用多种反爬虫策略提高爬取成功率;

2201_76125261的博客 682

【读书笔记】Effective C++ 条款3:尽可能使用const

同时,对于缓存,我们可能需要微小改动里面的值,即使改变了也依旧认为是const。的重载,const函数和非const函数绝大多数代码都是一样的,因此能否复用呢?在上面的代码中,const仅仅为保证str1指向的字符不被改变,但是我们可以将str1指向的内容改变。(注意:由于书本是比较老的,现在即便是c++98编译也会报错,但是由于是书中的例子,就讲究看一下吧)在这过程中,将const作为让编译器维护常量的口令,将编译器当作你的朋友。理论可以,但是调用非const就意味着需要冒着被改变的风险。

m0_68617924的博客 1002

5、高级综合技术:从调度到优化的全面解析

本文深入解析了高级综合技术,涵盖从控制/数据流图构建、调度算法、分配绑定策略到编译器优化的全流程。通过案例分析和对比,探讨了不同优化策略对性能和资源利用的影响,并总结了关键要点及未来发展趋势,为高效利用FPGA实现数字设计提供了全面指导。

night的博客 117

Effective C++读书笔记(3) 条款03 尽可能使用const

​ 解决方法可以是使用一个标记位判断是否有效, 但是这种有效也是会在 const 接口函数中改变的, 所以并不可以被坚持要 bitwise constness 的编译器同意. 这时可以利用 C++ 的一个和 const 相关的摆动场 mutable, mutable 会告诉编译器这个成员是 const 但是, 他还是有可能会被改动, 所以编译器会进行放行.​ const最具威力的用法是和函数声明结合, 在一个函数声明中可以和函数返回值, 各参数值, 函数自身(如果是成员函数的话)产生关联.

roseisbule的博客 284

第14.11章 高翔博士最新开源框架Lightning-LM源码解读(十一):离线定位模块全解析,从激光匹配到位姿图优化的极致优化

本文介绍了Lightning-LM离线定位模块的技术架构与实现细节。该模块基于3D激光雷达与IMU融合,采用改进版NDT匹配算法实现高精度定位,具备动态图层更新、多源信息融合等特性。核心流程包括数据预处理、激光里程计处理、IMU预测与点云去畸变、位姿图优化等环节,通过轻量级miao库实现高效增量优化。文章详细解析了模块的代码结构、关键函数功能及数据流,为SLAM系统的开发与优化提供了实践参考。

行知SLAM 375

北斗导航 | 2023 PTTI会议论文 2023 ITM会议论文 2022 ION GNSS+ 会议论文下载:ION 美国导航学会

2023 国际技术会议(ITM) 2023 精密时间和时间间隔系统和应用会议(PTTI) 2022 美国导航学会国际会议(ION GNSS +)

尘世冰封的专栏 4612

char* 赋值 const char* 释放_Effective C++读书笔记之条款3:尽可能使用const

点击上方蓝字关注我们 C++的const关键字会强制编译器实施保持某个值不变的约束,帮助你在编译期间就能发现错误,灵活使用const能提高代码质量还能避免不想被改变的值被修改。下面我将从const作用于变量、形参、引用、函数返回值、迭代器、成员变量和成员函数方面讲解对const的理解,以及为什么要尽可能的使用const。const修饰常规变量const关键字...

weixin_36415206的博客 582

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

读书笔记_Effective C++_习惯C++

这是一本非常经典C++书籍,也是我在工作中发现自己C++上还有很多薄弱点的时候经常拿来充电的。这本书内容很多,讲了很多如何高效地使用C++的方法,有些地方自己也没能啃透,读过一遍后很多知识点容易忘记,这次是一条一条地进行温习,之所以会分享出来是觉得对于程序员来说,好记性不如烂笔头,自己多动手往往在真正写程序的时候能够像条件反射一样写出好的代码。慢工出细活,对待技术要有谨慎和敬畏之心。这本书推荐喜欢C

John_cdy的专栏 3194

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Effective C++ | 读书笔记 (三)

提前定义变量,有可能导致变量并没有使用(如中间抛异常了),而平白多了一个构造和析构成本。但是循环怎么办?// 方式AWidget w;i < n;...// 方式Bi < n;++i) {...做法A:1个构造 + 1个析构 + n个赋值操作做法B:n个构造函数 + n个析构函数打破本条款选择A的依据:(1)你知道赋值成本比“构造+析构"成本低。(2)你正在处理代码中效率高度敏感的部分。否则你应该使用做法B,维持变量尽可能在使用时定义的原则。请记住。

m0_74795952的博客 945

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

《Effective C++》 读书笔记 条款6-10

Effective C++ 6-10 Note 条款06:若不想使用编译器自动生成的函数,就明确拒绝 在老版的C++中,将不想自动生成的函数声明为private并且不定义 在当前版本的C++中,可以使用delete修饰符进行修饰 条款07:为多态基类声明virtual析构函数 带多态性质的基类应该声明一个虚析构函数,如果类带有任何虚函数,它就应该有一个虚析构函数 当出现基类指针或引用指向派生类对象时,如果析构函数不为虚函数,那么调用的就是静态对象的析构函数,也就是基类的析构函数,这会导致派生类的派生部分没

youyadefeng1的博客 282

Effective C++读书笔记

 记得前段时间又一次拿起《Effective C++》的时候,有种豁然开朗的感觉,所以翻出了我第一遍读时做的笔记。只做参考以及查阅之用。如有需要请参阅《Effective C++》书本。 by shenzi/2010.5.17一.让自己习惯C++   条款01:视C++为一个语言联邦    为了更好的理解C++,我们将C++分解为四个主要次语言:C。说到底C++仍是以C

shenzi的天空 2万+

Effective C++ | 读书笔记 (一)

这意味着,如果你在一个编译单元中依赖于另一个编译单元中的全局静态对象的初始化结果,你的程序可能会遇到未定义行为,因为那些对象的初始化次序是不确定的。在构造、析构函数中一定只会调用本类中的虚函数。原因:当基类指针(引用)指向子类对象时,如果析构对象通过delete 指针的方式,只会调用基类的析构函数,不会调用子类的析构函数。如果把这个当做是基类,会有问题,析构函数只有声明没有定义,析构函数从派生类到基类的调用时,会发生链接错误。时,先调用基类的构造函数,此时派生类还没有被构造出来,所以调用的是基类的虚函数。

m0_74795952的博客 1042

《Effective C++》 读书笔记(详细总结55条款)下篇

Effective C++ 目录五、实现26、尽可能延后变量定义的时间27、尽量少做转型动作28、避免返回 Handles 指向对象内部成分29、为异常安全努力是值得的30、透彻理解 inlining 里里外外31、将文件间的编译依存关系降到最低六、继承与面向对象设计32、确定你的 public 继承塑模出is-a的关系33、避免遮掩继承而来的名称34、区分接口继承和实现继承35、考虑 virtual 函数以外的其他选择36、绝不重新定义继承而来的 non-virtual 函数七、模板与泛型编程八、定制

身在边城 心在编程 870

《Effective C++》读书笔记

Effective C++Scott Meyers 屋檐下的水滴--读书笔记系列http://blog.youkuaiyun.com/dwater 导读 Introduction1.   所谓declaration,是用来将一个object、function、class或template的类型告诉编译器,它不带细节信息。所谓definition,是用来将细节信息提供给编译器。对

DWATER 3167
上一篇: effective c++读书笔记 条款2
下一篇: Tcp/Ip详解 读书笔记 第1到4章
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值