Effective C++ 笔记1

effective modern c++ 学习笔记1 C++11引入了lambda表达式,它是一种创建匿名闭包的语法糖,可以方便地定义和使用闭包,其中capture list指定了要捕获的外部变量,可以是值捕获或引用捕获。C++11提供了std::function模板类,它是一种通用的函数对象包装器**,可以存储任何可调用的对象,包括普通函数、成员函数、函数对象、lambda表达式等³。std::function可以用来作为闭包的参数或返回值,提高了闭包的灵活性和通用性。 阅读详情

 本文内容基本来自于《Effective C++》一书,为学习后的笔记,以便温故。


《Effective C++ 》第 1节  让自己习惯C++

(1)条款01  视C++为一个语言联邦

理解C++,必须认识其主要的次语言。共有四个:

C,Object-Orented C++, Template C++, STL

(2)条款02 尽量以const, enum, inline替换#define

     如:#define  VALUE  1,该记号名称可能没有进入记号表,所以当你在使用该变量产生一个编译错误的时候,编译器的错误信息中会提到 1 这个数值,但是没有VALUE,这使得你无法准确的定位到错误。而是用const声明常量就会解决这个问题。

     class GamePlayer{

     static const int num = 5;

     int  scores[num];

};

在旧式编译器中也许不支持上述语法,他们不允许static成员在其声明式上获得初值。如果你的编译器不支持在声明式上赋值,可以再class的实现文件内进行定义。如:

class Test{

 static const int num; //在Test的头文件中声明

};

const int Test::num = 5; //在Test实现文件内

但是在GamePlayer类中,你必须要在声明数组scores时,给他一个确定的数值。这种情况下,可以使用“the enum hack“补偿做法。其理论基础是:“一个属于枚举类型的数值可权充ints来使用”,于是GamePlayer可定义如下:

class GamePlayer{

  enum{num = 5};

  int sorces[num];

};

对于enum hack方法来说,它的行为比较像#define,但是它能够计入记号表,能够避免编译错误不好定位的问题,并且他不像const 常量,取一个const的值是可以的,但是不可以取一个enum的地址。所以当你不想让别人获得一个pointer或者reference指向你的某个整数常量,enum可以帮你实现这个约束。

使用#define实现类似于函数的宏,不会招致函数调用带来的额外的开销。但是使用这种宏经常会出现各种陷阱和麻烦。所以使用inline来代替类似于函数的这种宏。

(3)条款03:尽可能使用const

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

编译器强制实施bitwiseconstness,但是你编写程序时应该使用“概念上的常量性”

当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。

(4)条款04:确定对象使用前已先被初始化

     读取未初始化的对象会导致不明确的行为,在某些平台上,仅仅只是读取未初始化的值,就可能使得程序终止。

     所以在使用任何类型前都应该首先初始化,无论是内置类型还是自定义类型。对于无任何成员的内置类型,我们需要手工完成初始化,对于自定义类型,初始化的任务落在了构造函数中。另外,还需要了解赋值和初始化的区别。例如:

class Test{

 int  x;

 stringy;

Test(int x, string y){}

};

Test:Test(){

 this->x= x; //这是赋值操作,而不是初始化操作

this->y = y;

}

C++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前。如Test的成员函数的初始化发生在default构造函数调用之前。Test构造函数的最佳写法是,使用所谓的member initialization list替换赋值动作:

Test::Test(int  x,string  y):x(x),y(y)  //这实现了成员变量的初始化。

{

  //do other thing

}

这样使得成员变量在初始化的时候就设置了相对应的值,而不需要在经过一次赋值操作。提高了效率。

C++有着十分固定的“成员初始化次序”。基类总是更早于子类的初始化,而class成员变量的初始化总是以其声明的次序初始化。

C++对于“定义在不同的编译单元内的non-localstatic对象的初始化次序并无明确的定义”。解决这种问题的办法是将每个non-local static对象搬到自己的专属函数内。这些函数返回一个reference,用户调用这些static函数,而不直接涉及到这些对象。这种手法的基础在于:C++保证,函数内的local static对象会在“该函数被调用期间,首次遇到该对象”时被初始化。单例模式使用的就是这种手法。


C语言实现TCP聊天室:Socket编程与并发模型实战解析 网络编程是构建分布式系统的核心技术,其核心在于理解进程间通信的底层机制。TCP/IP协议栈提供了可靠的字节流传输服务,通过Socket API这一抽象接口,开发者可以在应用层建立连接、收发数据。为了高效处理多个并发连接,服务器需要采用多线程或I/O复用模型,前者为每个连接创建独立线程,逻辑清晰但资源消耗大;后者通过select、poll或epoll等系统调用监控多个文件描述符,显著提升并发能力。这些技术是构建高性能网络服务(如即时通讯、在线游戏服务器)的基础。本文以C语言实现一个简洁的TCP聊天室为例,详细 阅读详情

相关推荐

【UE5】VoskPlugin实战:离线语音识别与实时文本转换全流程解析

本文详细解析了如何在UE5中利用VoskPlugin实现离线实时语音转文字功能。从环境搭建、插件配置、核心代码编写到蓝图测试,提供了完整的实战教程。重点阐述了离线方案零延迟、数据私密的优势,并分享了模型选择、性能优化及常见问题的解决方案,帮助开发者快速构建稳定可靠的语音交互系统。

weixin_29001655的博客 620

Effective C++阅读笔记(item 1-4)

我们回到最开始说的*p的情况,p是一个单纯变量名,如果decltype§返回的是p的声明类型,然而*p是返回左值的复杂表达式了,因此decltype返回的是左值引用,类型是表达式的类型。传递一个临时变量也并不是没有意义,有时候用户可能只是想简单的获得临时容器中的一个元素的拷贝,比如这样)==,我们需要将声明改为通用引用(也可以重载函数)。忽略引用行在指向常量的常量指针情况下只会忽略底层const,这一特性只会对形参本身有效,因此指针的常量特定会被忽略,但是指针所指对象的常量特性会被保留。

顾若茵的博客 1083

从零开始安装pytorch(包含GPU和CPU版本的安装)

Pytorch是。

qiaoxinyu1989的博客 8万+

Effective cpp 读书笔记1

Effective cpp 读书笔记 01.视C++为一个语言联邦 02.尽量以const,enum,inline替换#define 03.尽可能使用const 04.确定对象被使用前已先初始化

GZGlenn的博客 977

UE5实战:如何用Mesh Shader优化你的游戏场景渲染(附性能对比)

本文深入探讨了在UE5中利用Mesh Shader优化游戏场景渲染的实战方法。通过对比传统渲染管线与GPU Driven Pipeline,详细阐述了Mesh Shader如何通过任务着色器和网格着色器两阶段并行处理,实现更精细的meshlet级剔除,从而显著降低Draw Call和GPU带宽,提升渲染性能。文章附有具体的性能对比数据与代码示例,为开发者优化高复杂度场景提供了有效路径。

sunny的博客 296

Cadence Spectre仿真保姆级教程:从DC/AC到PSS/PV,手把手教你搞定模拟电路分析

作为业界标准的Cadence Spectre仿真器,以其精确的算法和丰富的分析类型,成为每个模拟IC工程师必须掌握的利器。本文将带你从零开始,系统掌握Spectre仿真的核心技能,从最基础的DC工作点分析到复杂的PSS相位噪声仿真,每个步骤都配有详细的操作指导和实用技巧。记得我第一次使用Spectre仿真一个简单的两级运放时,花了整整三天时间才得到正确的AC响应曲线。过程中踩过的坑、浪费的时间,现在想来都是宝贵的学习资源。与传统的AC分析不同,STB分析可以在不破坏环路的情况下评估稳定性。

weixin_30898555的博客 335

Effective c++ 笔记1

名词解释: size_t 是c++中的一个代表计数的类型。其实际就是一个typedef 。 但是很有用。在容器的下标操作中,下标就会被转换为size_t 类型。 接口interface 。不同于java中的接口,这里指可以访问的函数等资源。比如一个函数的signature(签名,也就是返回类型和参数类型,相当于这个函数名的类型),一个类的成员函数等。 client。代表客户,也就是使用你所编写的代码的人或者程序。我们写代码要关注的是把client放在心上,让其可以更加便捷地去用我们写地代码 使用..

weixin_44261255的博客 1955

DeepSeek与豆包无缝对接:5分钟搞定智能周报自动化(附完整代码)

本文详细介绍了如何利用DeepSeek与豆包API,快速搭建一个智能周报自动化系统。通过整合豆包平台的工作流数据,并调用DeepSeek大模型进行深度分析与内容生成,该系统能在5分钟内自动抓取、分析多源信息,并生成结构清晰、富有洞察力的团队周报,显著提升工作效率。

weixin_29029995的博客 491

【Effective C++笔记 (1-2)】

优先使用const和enum:在需要定义常量时,优先选择const对象或enum,以获得类型安全性和更好的作用域控制。使用inline函数:对于需要类似宏功能的场景,使用inline函数替代#define宏,可以避免多次求值和类型不安全的问题,同时保持性能优势。

limingkang1的博客 835

第15章 AI 产品原型设计 —— 让 AI 成为你的产品经理

理解产品需求- 将模糊的想法转化为具体的原型方案生成高质量原型- 输出符合设计规范的 HTML 原型提供设计建议- 基于 UX 最佳实践给出优化建议维护原型文档- 自动更新原型说明和变更记录。

快乐的修补匠的专栏 502

39、信号流图:解决线性代数方程组的图论方法

本文介绍了信号流图理论在求解线性代数方程组中的应用,重点阐述了Coates方法和Mason方法的原理、步骤及对比分析。通过图论视角,将矩阵运算转化为对有向图结构的分析,利用1-因子、1-阶连接、前向路径和反馈回路等概念,推导出方程组解的拓扑公式。文章结合具体实例演示两种方法的计算过程,并总结其在电路分析、控制系统和通信系统等领域的拓展应用,展示了信号流图理论的直观性与有效性。

pear55的博客 87

笔记1 Effective C++

知识点1 copy构造函数和copy assignment操作符函数 copy构造函数被用来“以同型对象初始化自我对象”,copy assignment操作符被用来“从另一个同型对象中拷贝其值到自我对象” #ifndef _WIDGET_H_ #define _WIDGET_H_ class Widget { private: int a; double b; public: Widget(); // default构造函数 Widget(const Widget& rh

一个有梦想,有追求,有抱负的人 204

endNote X9 增加 / 删除参考文献 文献编号自动更新

EndNote X9 插入参考文献常见问题总结。增删参考文献 文献编号自动更新

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 7495

Effective C++ 阅读笔记之Chapter1

前言 大家好,我是雨墨,我深知好记性不如烂笔头的道理,所以在阅读的时候都尽量写读书笔记,方便日后复习,当然笔记并不能代替书籍上的内容。希望我的笔记也能帮助到大家,如果我的笔记有什么问题,欢迎大家给小老弟纠错~ 条款一总结 视 C++ 为 C 、 面向对象、template、STL 的联邦 条款二总结 宏定义的坏处: 一方面以 #define example 17举例 编辑器调试的时候,很有可能会造成错误信息是17,然后让你不知所措,这是什么?从哪来的?。 预处理器可能盲目地将example替换成17,导

qq_51387669的博客 287

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【Effective C++】 阅读笔记1

Effective C++阅读笔记

gma999的博客 1176

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Effective C++读书笔记 第1章

Ⅰ、 让自习惯C++ 条款01:视C++为一个语言连邦 C++是一个多重泛型编程语言,同时支持过程形式、面向对象形式、泛型形式、元编程形式的语言。 将C++是为一个联邦,主要的此语言为4个: procedural-based C。C语言的面向过程 Object-Oriented C++。面向对象 Template C++。 C++ 的泛型 (generics) 编程和由 template 的强大...

生命不息,代码不止 387

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Effective C++ 读书笔记(1)

Effective C++ 读书笔记(条款1):视C++为一个语言联邦         做为一个半路出家的IT人,断断续续的学习编程也学了有两年多了,经过两年多的学习,感觉现在才开始慢慢的入门,刚开始学的时候感觉学习编程语言就是学习编程,慢慢的才感觉到语言只是一个解决问题的工具而已,他就是人与计算机交互的一个媒介,跟汉语、英语等没有什么本质的不同,相反别那些语言简单多了吧,后来慢慢的不在去刻意的

nosmatch的专栏 883

Effective C++ 学习笔记1

条款1的核心思想是C++看作是一个由多个子语言组成的联邦(C、Object-Oriented C++和Template C++等),而不是一个单一的语言。《Effective C++》是一本经典的C++书籍,虽然这本书已经出版很多年了,但书中所列举的条款在C++20乃至C++23都很通用,理解书中的这些条款,能够提高C++开发人员开发效率。Object-Oriented C++:C++引入了面向对象编程的概念,包括类(class)、继承(inheritance)、多态(polymorphism)等。

taxue4485的专栏 208

Effective C++笔记1

【条款1】尽量用const和inline,而不用#define换言之,尽量用编译器而不用预处理。1.尽量用const,而不用#define#define ASPECT_RATIO 1.653预处理后,编译器只知道1.653而不知道ASPECT_RATIO,编译出错时报错信息只显示1.653而不显示ASPECT_RATIO,这可能很令人费解。可以用常量实现:const double ASPECT_R

姚sir的话 344

Effective C++笔记(1)

Effective C++笔记 条款01和条款02

上善若水 729

Effective C++阅读笔记1

第四章 设计与声明 条款18让接口容易被正确使用,不易被误用; ①重定义接口的类型,比如: Data(int day, int month, int year);替换为:Data(Day d, Month m, Year y);这样的好处在于较好的防止输入顺序出错;可以对各类型加入束缚值,进一步预防调用出错,比如Month类别只允许1-12之间的整数类型; ②保持接口的一致性,以及类型与内置类...

liqing19的博客 292

《effective c++》阅读笔记 1

之前阅读一部分《effective C++》作为一本被众多读者所推荐的书自然有它的独特的魅力所在。在观看过一部分该书的一部分内容之后,不由的觉得该书确实是集C++精华于一身,同时还加以科普了很多相对来说在一般老式课本难以见到的语法和语句,如智能指针等用法,并举出实例将该其与其他语法相对而言的优点凸显出来。该书作为一本“程序员编程规范守则”的功能远远大于其作为一本深入教科书的功能,书中一共提出了55...

真的不知道叫什么的博客 343

Effective C++笔记:1.让自己习惯C++

前段时间开始看《Effective C++》这本书,感觉上面一些东西确实挺有用的,所以把它整理出来。 条款01:视C++为一个语言联邦 将C++视为一个由相关语言组成的联邦,总共有4个次语言组成: (1)C (2)Object-Oriented C++(面向对象):包括:类、封装、继承、多态、virtual函数 (3)Template C++(泛型) (4)STL 条款02:...

mr_junning的博客 169

《Effective C++》笔记汇总_思维导图 chap1

1.让自己习惯C++ 下面是思维导图的截图,资源发在Github上了,需要的朋友自取 《Effective C++》chap1:让自己习惯C++ 一些话儿 本人水平有限,如果笔记中有错误或是遗漏的地方,还请大家体谅。 这份笔记花了小生非常多的时间与精力,如果能帮到你对C++的学习,点个赞即可! ...

qq_43596544的博客 476

Effective C++之条款1,条款2笔记整理

有人说C++程序员可以分为两类,读过Effective C++的和没读过的。世界顶级C++大师Scott Meyers 成名之作的第三版的确当得起这样的评价。 本书并没有你告诉什么是C++语言,怎样使用C++语言,而是从一个经验丰富的C++大师的角度告诉程序员:怎么样快速编写健壮的,高效的,稳定的,易于移植和易于重用的C++程序。 本笔记共有55个条款,从多个角度介绍了C++的使用经验和应遵循

hellokazhang的博客 2359

effective c++笔记1

c++是个多重范型编程语言,支持过程形式(procedural);面向对象形式(object-oriented);函数形式(functional);范型形式;元编程形式.c++是一个由相关语言组成的联邦而非单一语言.在其某个次语言中,各种守则与通例都倾向简单 直观易懂 并且容易记住.1.c,c++以c为基础. 2.Object-Oriented C++.面向对象c++3.Tem

gisant的专栏 757
上一篇: 堆排序算法实现(C++)
下一篇: Effective C++ 笔记2
csc_csc_csc
博客等级 码龄15年 169粉丝 70原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值