Effective C++ 01

本文介绍了C++编程中的四个核心原则:将C++视为多种语言的联合体;优选const、enum及inline替代预处理器指令;广泛运用const提高代码质量;确保对象在使用前已初始化。这些原则有助于开发者编写更加安全、高效的C++程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Rule one

视C++为一个语言联邦 (view C++ as a federation of languages)

 

理解C++必须认识其他四种次语言:C,object-oriented  C++,Template C++, STL

 

总结:

C++的高效编程守则视情况而比变化,取决于你使用C++的那个部分

 

Rule two

尽量用const,enum,inline替换#define (Prefer const enums and inlines to #defines)

 

使用编译器替换预处理器是最合理的。

 

#define ASPECT_RATIO 123

1.预处理的记号名称有可能没有进到记号表内,在编译出错的时候会造成困惑。错误信息内会提及123 但是不会提及ASPECT_RATIO.

2.预处理器会盲目的将ASPECT_RATIO替换成123, 当对于浮点常量而言会导致代码内出现多份数据。

 

解决方案: const int ASPECT_RATIO = 123;(用常量替换#define)

 

特殊情况:

1.定义常量指针, 因为常量指针一般都定义在头文件一边复用,所以有必要声明为const。

2.class专属常量,为确保此常量至多只有一份 必须成为一个static对象。

 

enum hack

旧式编译器不支持“in class 初值设定” 但是需要在初始化的时候用到则可以使用enum hack的方式

class Test

{

enum { nWord = 1  };// 符号常量的声明

int array[nWord];

}

 

enum hack的好处:

1.enmu hack的行为更像是#define 而不是const 无法获取该变量位置(该方法的作用是在于解决的#define无法控制在类中的作用域)

2.不会导致不必要的内存分配

 

总结:

1.对于单纯变量,最好用const和enums来替换#define

2.对于形似函数的宏, 最好改用inline函数替换#define

 

Rule three

尽可能的使用const (Use const whenever possible)

 

const制定了一个语言约束(该值无法被修改)并且编译器会强制执行这个约束。

 

const语法定义

const char*   对象常量

char *const   指针常量

constchart* const 对象和指针都是常量

 

const和*的位置关系决定,与类型位置无关

const char*

char const* 一致

 

函数返回一个const对象能够减少因客户导致的意外。

 

const 成员函数

const的成员函数主要用于操纵const对象

注意:

1.两个成员函数如果只是常量性不同,可以被重载。(C++一个很重要的特性)

2.函数的返回值都是值拷贝,所以可以赋值。

 

bitwise  constness:成员函数只有不更改对象的任何成员变量

logical  constness: 成员函数可以修改其处理对象内的bits,但是只有在客户端侦测不出的情况下才可以。

bitewise的问题在于一个更改了指针所指对象的成员函数虽然不是const但是不会引起编译器异议。

如果需要在常量长远函数内修改成功元变量可以使用mutable来修饰成员变量。

 

const 和 non-const成员函数中避免重复

利用转型(?) static进行安全转型 const进行const的添加和移除。

 

注意:const函数调用non const 函数是一种错误的行为,因为它可能会导致const对象被修改 但是编译器并没有发现。

 

总结:

1.const可以帮助编译器侦测错误用法,但是存在缺陷。可以用于对象 参数 返回类型 成员函数本体等。

2.编译器强制实施bitwise constness 但是编写时应当使用 概念上的常量性

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

Rule four

确定对象被使用前已先被初始化 (Use const whenever possible)

 

C++在不同平台和不同情况下对于未初始化的参数默认数据是不可预知的,最佳的处理方式是永远在使用之前对对象进行初始化。

 

对于构造函数而言 可以用初始化和赋值来处理参数,成员初值列来实现初始化。

初始化的效率较高,原因:赋值是先初始化在进行赋值,比初始化多出一布操作。

 

对于设置默认值的参数可以在初始化列表内进行无参初始化,这样保证所有的参数都在初始化列表内,防止出现有些参数没有初始化。而对于某些赋值和初始化表现一样良好的成员变量则可以单独写一个私有函数来做赋值,适用于某些初始值由文件或数据库读入的参数。

初始化列表注意:

最好以声明顺序进行排序, 原因如下:

 

C++是有固定的成员初始化次序:

1.基类比派生类更早初始化。

2.class 的成员变量总是以声明的顺序被初始化。

C++对于不同编译单元的静态对象(或者说no local static)初始化顺序没有明确的定义。

解决方案:将no local static搬到专属函数内。

 

总结:

1.class内置对象需要手工初始化,因为C++不保证初始化他们。

2.构造函数最好使用成员初始化列表而不是赋值操作,其在初始化列表内的顺序应当与其声明的顺序相同。

3.为避免跨编译单元的初始化次序问题,local static对象应当替换non local static对象。

 

 

 

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值