条款53:不要轻忽编译器的警告 努力在编译器最高警告级别下争取“无任何警告”。 不要过度依赖编译器的报警能力,不同的编译器对待同一件事情的态度不相同。 条款54:让自己熟悉包...
条款53:不要轻忽编译器的警告 努力在编译器最高警告级别下争取“无任何警告”。 不要过度依赖编译器的报警能力,不同的编译器对待同一件事情的态度不相同。 条款54:让自己熟悉包...
条款49:了解new-handler的行为 当operator new或者operator new[]分配内存时,如果不能获得指定大小的内存时,则会抛出异常,即std::ba...
背景: 实际项目中,我们往往将一个系统分解成一个个功能模块,这些功能模块以动态库加载的方式由主程序加载使用。 需求1: 主程序定义好功能类的接口,每个功能模块继承这些功能类(...
条款41:了解隐式接口和编译器多态 对于class而言,接口是显式的,动态通过virtual函数实现,发生于运行期间。 对于template而言,接口是隐式的,通过模板实例化...
条款32:确定public继承塑模出is-a关系 is-a和has-a是C++类的两个重要关系描述,如果类D基于public方式继承于类B,则D类的实例 is-a B类的实例...
背景:我们在程序中往往需要对一个类实例的合法性进行检查,大部分的程序员都会想到在类的方法中提供一个方法检查合法性(比如提供一个IsValid函数),但是还有一个更好的方法就是...
条款26:尽可能延后变量定义式的出现时间 考察下面的示例代码: 很显然,这里的myStr提前定义了,并且会带来额外的默认构造函数的开销,虽然在这个例子中微乎其微。 在定义一个...
条款18:让接口容易被正确使用,不易被误用 建立新的类型作为函数可以防止用户输入错误的数据,考察下面的类构造函数: 当用户调用构造函数时,很容易输入错误,比如将day的值当成...
C++程序开发中我们常用std::sort函数对一个vector数组进行排序,但是某些情况下会产生crash的情况,比如下面的代码: 究其原因是sort函数要满足strict...
条款13:以对象管理资源 为防止内存资源泄露,当申请到内存资源后,最好立即以对象方式进行封装,即RAII的方式。比如,我们常用的shared_ptr,书中提到的auto_pt...
一般在模板函数中如果定义T&&时,这时候的变量参数不一定专指右值引用的意思,而是万能引用的意思,如下代码所示: 输出结果: type of T is int&, type o...
条款05:了解C++默默编写并调用的哪些函数 如果写了一个空的类,C++编译器会为这个类自当产生四个函数,并且这些函数都是inline的:(1)默认构造函数,不带参数;(2)...
在项目中使用单例类是个比较通用的需求,比如我们定义了一个类A,我们想实现一个类A的单例模式。 方法1:直接在类A的定义中实现 方法2:通过一个模板类 总结:方法2的好处是可以...
https://wooyun.js.org/drops/SSL.TLS%E5%8D%8F%E8%AE%AE%E5%AE%89%E5%85%A8%E7%B3%BB%E5%88%...
条款01:视C++为一个语言联邦 C++是四个次语言的联邦,它们是: C:传统的区块(blocks)、语句(statements)、预处理器(preprocessors)、内...
引用折叠在C++模板函数中经常使用,它的规则如下: & + & -> & & + && -> & && + & -> & && + && -> && 记忆诀窍:凡是折叠中出现...
方法1:使用C++库自带的typeid函数 一般使用C++库中的typeid函数获取一个变量的类型,不过打印出来的类型不直观,并且它不支持引用类型的变量,也不能区分const...
大家在进行C++代码开发的时候,往往都需要进行日志记录。今天整理了一个简单的日志模块实现,大家如果用得着可以参考,它支持以下特性: 支持日志级别。 支持日志级别不同,采用不同...
考察以下代码: 输出的打印出现以下情况: hank@hank-ThinkPad-T450s:~/cpp$ ./test_cvWaitingRunningData prepar...
首先,如果在头文件中定义一个普通的函数,比如下面这样,肯定会在程序链接的时候报“重复定义”的错误。 D:/kexin/untitled5/s.h:16: multiple d...