pspice编程技术
学习pspice的入门资料,很适合初学者。EDA工具应用丛书Spice/ PSpice绵程技术高燕梅房蔓楠编A995B9電子工業出版Publishing House of Electronics industry北京· BEIJIⅠNG内容简介在众多的计算机辅助设计(CAD〕工具软件中,pie程序是精度最高、最受欢迎的软件丁具许多EDA系统软件的电路模我都分都是用ice序来完成的。本书系统讲述spie/ PSpice編程技术,并提供大量的编程仿良实例。全书分为7章1第1章介绍Spie程序的功能和特点;第2章和第3章分别介绍 PSpice Is版和wnws版的编程电路图绘制电路分析及波形处理方法;第4章介绍元器件的spce模型及参数;第5章介绍各种spre数学宏模型和系统宏模型;第6章绘出常用电路的仿真实例;第7章讲述运行 Spice序时可能出现的不收敛现象以及克服不收敛问题的方法本书可作为大中专院校电子类专业的教材或实验考书,也可供屯了系统设计、开发人员和电路设计爱好者参考a未经许叮,个得以任何方式复制或抄袋本书之部分或全内容。版权所有,侵权必究图书在版编目【CP}数据Spic:e/FSpice编釋技术/高燕悔房蔓楠编著.—北京:电子工业出版社,2002.6(EDA|县应用丛书sN7553691RI.S…〗.①高…②房…Ⅲ.电子电路一计算机辅助设计一应用软件, pice/Pspice-程序设计tY. TNI02屮国版本图书馆CP数据核字(2002)第035519号责任編辑:张来盛印刷:北京大宇星印圳出版发行:电了工业出版社htp://ww.phei. Com.cn引京市海淀区万寿路173信箱邮编100035经销:各地新华书店于本:787×10921/16印张:1925字数:4928千字版次:2002年6月第1版2002年6月第1次印刷印数:6000册定价:2800元凡购买旦子L业出版社的至书,如有缺损问题请向购买书店调换。若书店售缺请与本社发行部联系联系电话:(C0)68279077臃着计箅机技术的飞速发展,计算杋辅助设计(CA门)技术已成为屯路设计工程师不吁缺少的有力工具。国内外电子线路CA软件的相继推出与版本更新,使CA技术的应用渗透到电子线路与系统设计的各个领域,如电路图的绘制、模拟电路仿真、逻辑电路分析、优化设计、印刷电路版的布线等。CAD技术的发展使得电子线路设计的速度、质量和精度得以保证在众多的CAD工具软件中,Spce程序是精度最高最受欢迎的软件T具,许多EDA系统软件的电路模拟部分是应用 Spice程序来完成的。Ppie是Spce程序应用在P!上的程序,它的主要算法与 pire相同。由于 PSpice A/程序集成了模拟与数字电路的仿真运算法,它不仅订以仿真单一的模拟电路或数字电路,而H可以有效、完善地仿真模拟和数字混合电路。经过多年的改版, PSpice AD以其强大的功能炇高度的集成性而成为现今最受欢理的电路仿真软件。 PSpice程序已被另一家在FDA领哦的大公司 OCAD并购,更名为 OrAD PSpice A/D,版本升级为v。根据多件来对 Spice程序的学习和讲究我们认为,然pice程序不断升级,各种版本的编辑窗口变化多端而豆新功能不断发展,令初学者眼花缭乱,但如果能首先掌握Spie程序的基本编程语言,即 pice pos版的編程方法,了解Spi程序的基木计算方法和常用模型,就掌握了pice程序的真谛,任何版本的pice程序都能轻松驾驭。基于这一点,衣编群本书时,我们以 PSpice的0s版为例,详细讲解 Spice的基本编程语言,由浅入深,求消晰易懂。这是本书与其他Psce程序书籍不同的重要特点,希望读者在使用木书时会有深刻体径杯书内容分为7章。第1章概要介绍$pe序的功能和特点;第2章详细介绍PpieDOS版的编程方法和各种分析功能对各种元器件及电路给出了编程示例使得初学者很容易掌握;第3章洋细介绍 ISpice Windows版应用轶件的电路图绘制和电路分析、数据波形处理方法;第4章详细介绍二极管丑r晶体管、MOS场效应管等器件的模型电路及参数,并有详尽的图形公式讲解;第5章介绍应用 PSpice程序编程功能实现的各种数学宏模型和系统宏模型,这些宏模型可以内置于电路系统中,代替部分电路模块的功能或作为测试源,乜可以代替不需设计的屯路部介,使得电系统的分析测试简化,精度提髙;第6章给出·些常用电路的仿真实例;第7章介绍运行spie程序时可能出现的不收敛现象和克服不收敛问题的方法本书的主要特点(1)适用于初学者。本书对DO版的ppie程序作了详细约介绍,给出了各种电路的编程举例;对 Windows版 PSpice程序的各种菜单命令给出了详细的说明,使初学者能很快学会绘制电路图的方法,并应用各种指令进行分析,打印输出结果。(2)适用干木科、专科学牛和电路设计爱好者。学优布学会应用spic程序后,可以随时方使地利用 Spice软件检查作业,完成电路设计编程和课程设计任务如果他们对电路的基木理论不清楚,就不会有正确的运算步骤也不能从程序中得到正确的解答,这时学生就需要修改稆序。这种反复运算的过程是教会学生本理论的有效方法。电路教学实践表明,孜科书中的与颞没钌作一的题,最好的解答往社是越出常规的。理论学习好的学生,往往不一定能解决实际的工程问题,从而不能话应激烈的市场竞争的需要。实际的工程问题必狐通过反复设计实践来解决。应用 spice程进行设计,能够培养学竺的创造性思绁。(3)Spie序是实验师的好帮手。粗通计算机技术的教帅可以通过本迅速地掌握ice编程技术将其应川于实验教学,既可以鼓助学牛进行创造性的实验活动,可以桰助学生加深理解理论分析的步骤和结果。在应用实际元器件和仪表进行实验时,由于元器件、设备和时间的限制,学生只能徹一些确定的实验:而应用spce教件进行设计,学生可以进行多种电路实验,将多种设计方案输入计算机,用 Spice软件调测设计电路,比较改进设计结果些实际也路的成功设计,可以更加激发同学们的创造热情,迅速提高他们的电路设计能力(4)为1程技术人员提供了详尽的模型资料和有效的宏模型。读者在设计电路时,可根楞设计需要选定模型参数,在调测屯电路时可以通过修改模型参数来得到最设计结果。由于编著者水平有限加之吋问仓促;书中难免有不妥之处,敬请读者批评指正:。编著者202年1月目录第1章论…(l)第2章 PSpice DOS版编程…看司即甲4p■即甲p甲唱自即看■口口申d『p自11■■督會血血血11■2.概述111……………,……………………(4)版 PSpice的组成2.]2 PSpice的装与运行翻山酯■口鲁鲁■一口即……………(5)2.2屯路描述…………(5)221电路描述语句自■中中■山2.2.2分柝指令格式………2.2.3输出指令格式中·中·P…(10)2.24简单程序举例…………(10)2.3元器件描述………(11)23.1元件描述语付………23.2器件描述语句……………………………………………………………………(20)2.3.3屯源描述语句■■L■昌L山昌山▲(49)4分析指令(55)4.1直流分忻指令……■■卜■P■鲁■自曾血自自血自血自■自血■■血■■血自鲁自■血b曲會血………(55242交流分析指令(57)24.3噪声分析指令57)244膦态分析指令………………亠郾·■·▲·↓↓↓↓中·dpc+■鲁■q(582.4.5傅里叶分析■■■58)2.5输出指令■日「■■■早,■■『卩q卜■↓■4晋b量b………(59)2.s.1数据打印评句……………………(59)2.5.2文本绘图语句…………………f6l2.5.3图形后处理程序(62)2.5.4打印宽枣话何62)2.6其他功能描述语句P·14昌山如■+--中『甲中即『『日『日4d『‘(63)2.0.1任选唤培句4聊ψψ■中φPp中p白pq◆F(63)26,2结束语句……(64)2.6.3包含话句………………………(64)2.7子电路与库函数日申曾·曾平4甲·個■■冒PPPP■宁■4■b■個自自■鲁血自鲁d咖·■卩聊即p聊(64)2.7.l器件模型语句 MODEL〔65)2.7.2库函数调用语句UIB65)2..3子电路调用语句SHKT…………s…………*(66)28数字电路模拟■■■■冒P冒4bb■凸山……………………(6)8.1概述662.8.2数字电路器件………………678.3数宁信号游72)2.8,4数电路的 P=pice分析·督■■『■冒?冒■會4會■1■■■■‘‘■t76第3章 PSpice Windows版编程833.1概述(833.2绘制电路原理图■■冒冒冒■1冒冒■■■『■冒■■■曾■■■■■■■833.2.1打开 Schematics程序项3.22绘图窗计的址能建84)3.2.3绘图常用命令顶853.3电路分析司口■■■◆■●■血曲(92)3.3.1打开Fps耙序项鲁血■923.3.2 PSpic:e常用角令项…923.4杳看输出波形…………………………………(933.4.1打开Prb程序项(933.42Pmhe窗冂的功能键…(3343Prhe常用命令项■■■■■■P■血l自自■L自·_甲■唱司·■■……………(953.5建立元件库……9?3.5.L打开Pats程予项……;………3.52元件库窗口的功能键冒士14■+■b93.5.3Pars常用命仝项……甲甲郾·!···』■▲--rT……(99)3,6激励源编辑器……(1033.6.1打开激励源绢辑窗口,……s"…""………(1033.6.2激源编辑窗口的功能键(104)激动源编器常用命令项3.7设汁举例卜:4幽■山■■■▲甲曾番甲晋P晋量青↓dd画晶1103.7.谩计一个数字电路……(LlO3.7.2温度分析实例………■音鲁白中中P中甲甲P『TPP■個◆自冒t(1I537.3噪声分析实例…(1203.7.4傅甲叶分析实例…;;…7.5多数分析实例………………(124)3.7.6 Mante Carlo分析与性能分析…………………(127)37.7最荣悟况分析;q■■T■■■■(l3第4章Spce元件模型与模型参数…………………(1344. I Spice二极管模刑■冒■1■■中1344.1.Ⅰ大注人电流的-极管静态DC模型(]364.1.2极管信号模型…■■■■■■■I38极管的温度模型1384.2双极型晶体管模型和参数提取……(1394.2.上BT模型慨述∴……………………"…(l39)4.2.2lrs-M钏l模型…(14l)4.2.3 Gummel-Pon模型p:4日由·亠‘(1454.3MGS场效应管(MOET)模型参数和提取(150)4.3.1 MOSFET的Sice一级静态镆型(150)4.3.2 MOSFET_·级静态模型·(1524.3.3M0SFET_级静态模型·A.·.日.B4L日.BB昌吾4↓bh如昌4吾山聶如亠↓4亠(154)4.3.4 MOSFET Spice棋型的比较■1■‘』中中中中中中中山十啬4鲁山平『■+一(155)44结型场效应晶体管(JFFT)模型和参数提取………………………………(157)4.4]N沟道JFF静态模型…■血■函■幽血………(158)4.4.2JEY大信号模型(159)4.5砷化镓金属≯导体场效应晶体管( GaAs mesfet)模型1自中……(160)4.6数字器件模型(161)4.6.l逻辑门电路………………………………**……(1614.6.2融漫平卩■甲P甲↓甲罾↓晋甲■■!甲青罾晉甲■■『卜鲁昏■晋}■_■■d晋d矗啬(16446.3可编程逻辑器件(PLA……(167)4.6.4数字UO接口子电路……………………………;……"(]70)4.6.57400系列TT和CMOS模型库(173)4.66CM84000系列模型库(184)4.6.7数字器件型举例………r…………………(187)第5章Spce数学宏横型(192)5.1数学功能宏模型……………………………………………………(192)5.L.电压加法器太模型T平■■『冒■■■■■■■■昌…(192)5.1.2电压乘法器宏模型…■甲qF『冒PP■曾………s…s……s………:(193)5.1.3电生除状器宏模型(195)5L4电压平方室模型(196)5..5理想变压宏模型h■甲甲普平罾甲甲■p■■b▲pt(197)5.L.6电压求平主根宏模型………………(198)5..7三角波/弦波转换器(20)5..8电压柑移电路(202)5l.9电压积分器宏模型看号『冒晋■■血dq·号司鲁■■■唱自血◆血■■自■■■p甲聊要L4↓(204)s.上,10电压徽分宏模型…;(206)5.].1电压绝对连宏模型…■■■矗■bt(207)5.].12电压峰值深测器宏模型LL山L山(2105.1.13频率乘法………………∴…(2lt)s.1.14频率除法据……(213)5.1.15频率加法据减法器……(215)5.].16相泣探测器(217)5.1.17传输线宏嫫型…号P■甲↓【■冒h219)5.1.18施密特触发器宏模型……;………………………………………(220)5.1.19电压取样一保持电路宏模型4■郾司郾■4L晶………………………(223)5.].2咏冲宽变调制器宏模芈…………(2245.1.21电压填度调制器宏模型……(226)5.L.22电压对数放大器宏模型■■■(228)5.1,23N次根提取电路宏模型…(229)5.1.24拉氏变换宏模型…………………(232)5.2系统方程去模型…(232)52.]微分方程纤的积分型模拟法……………………………(232)5.2.2微分方程组的微分型模拟法………(236)5.23网络函数的Sice电路模型…(238)53非线性器件的Srie模型…………………,…………(246)5.3.1传感器件的Sice瞬念分析…:(246)5.3.2负值电慼和电容的Spie宏模型T?冒■T冒P250533运算放大器的Spe宏模型…………………(252第6章常用电路编程实刨…………………………………………………………(259)第7章 Spice的收斂问题(290)7.1什么是收敛问题鱼山d山血d血血dp血■■p甲1甲4·甲"qP+P290)7.2如何解决收敛问题……bdd■d…(290)7.2.]解次不收敛问题的思路……(290)7,2.2解决不收敛问题的可行力法…………(291)7.2-3解袂不收问题的条件参数和指令…(2927.3常见的错误信息…………甲甲司罪郾甲【即着L着4■■d·4画斗香山4·…(293)參考文献………………………(299)
- 2020-12-09下载
- 积分:1
华为C++语言编程规范
华为C++语言编程规范,内部资料se语言编程规范内部公开目录0说明前言代码总体原则与语言编程规范的关系规范实施、解释术语定义1常量62初始化和类型转换声明、定义与初始化类型转换3函数12内联函数函数参数函数指针4类...14类的设计构造、赋值和析构继承重载5作用域、模板和C+其他特性..25作用域模板其他6资源分配和释放287异常与错误处理33异常错误处理策略8标准库369程序效率语言特性的性能分级语言的性能优化指导华为机密,未经许可不得扩散第页共页se语言编程规范内部公开0并发4511风格48标小符命名与定义排版注释文件组织12可移植性(兼容性).4913全球化52多语言输入输出单一版本时区夏令时14业界编程规范和书籍55业界编程规编程指南《编程规范条规则、准则与最佳实践》《微软一站式示例代码库》扩展学习材料华为机密,未经许可不得扩散第页共页se语言编程规范内部公开语言编程规范0说明前言随着业务的发展和产品架构的演进,越来越多的传统电信产品使用C++语言,很多新型产品更是把C+作为首选。C艹继承于C,包含C的所有特性,同时又增加了新语言特性,如面向对象、泛型设计等。目前C-+使用现状是:基础技能薄弱,陷入很多误区,不能很好地发挥C++的作用。为了帮助团队合理使用C-+,规避语言陷阱,特制定本规范代码总体原则毘C语言编稈一样,C++编稈遵循通用原则:1、清晰第一。清晰性是易于维护、易于重构的程序必需只备的特征。2、简洁为美。简洁就是易于理解并且易于实现。3、选择合适的风格,与代码原有风格俣持一致。除此之外,C+编程还应该注意以下方面1、正确使用C+面向对象技术使得程序结枃清晰、简单,提高了代码的重用性,但又隐藏了很多內部实现细节,内存模型复杂,不小心会误入陷阱,比如:拷贝构造函数,赋值操作符,析构函数,重载等为了简化代码,改善代码结构,提髙编程效率,一些团队引入新特性和第三方库,如:模板技术、STL、Bost等,由于缺乏足够的理解,使用中屡次发生问题,比如对达代器( Iterator)使用不当导致功能失常,甚至稈序崩溃。所以,必须深入理解C艹+对象布局、內存模型等,了解编译器背后所做的处理,才能在编程中知道如何止确使用2、安全高效跟其他流行的高级语言、脚本语言相比,C艹+运行速度快,天然适合开发核心通信部件,但是这些部件对稳定性的要求非常高,不容许发生异常、失效以及崩溃。C艹-具有直接操作硬件、访问內存的能力提供了指针、地址运算等灵活特性,稈序员可以仟意发挥,增加了出锖的几率。所以在追求速度与灵峾性的冋同时,一定要注意保持程序的健壮性。在増强代码稳定性过桯中,程序员通常采用i-else等防御式编程,使得代码非常臃肿,可适当采用RAIⅠ、智能指针等技术华为机密,未经许可不得扩散第页共页se语言编程规范内部公开与语言编程规范的关系本文在《华为技术有限公司C语言编程规范》(简称C规范)基础上,通过详细阐述如何规避C++语言复杂性,避免C+-的低级错误,确保有效使用C-+语言特性,代码易于维扩。C规范里面相同的内容,夲规范不再重复。例如头文伻、变量、表达式、代码编辑与编译、可测试性安全性、单元测试等章节经过审妉,完全适合C+,本规范不再重复。标识符命名与定义、注祥、排版与柊式等内容也适合C++,仅仅添加了少量的C+特有的规则和建议,合并成风格一章;涵数章节增加了內联函数、函数参数等内容;可移植性増加了64位以及C艹+专冇的薮据转换等內容;质量保证也符合C艹+的需要,将资源分配和释放部分C艹特有的内容编写成单独章节;宏、常量也符合C++,考虑到C++普遍使用 cons t,增加了常属性( const)章节。新増初始化和类型转换,类,作用域、模板与C艹-其他特性,异常与错误处理,并发,全球化等C艹特有的内容本规范和C规范有沖突的地方,以本规范为准。规范实施、解释本规范制定了编写C+语言程序的基本原则、规则和建议。木规范适用于公司内使用C++语言编码的所有软件。本规范自发布之日起生效,对以后新编写的和修改的代码应遵守本规范本规范由软件工稈体系发布和维护。实施屮遇到问题,可以到论坛http://hi3ms.huaweicom/group/1735/threads.htmi上讨论。在某些情况下需要违反本规范给出的规则时,相关团队必须通过一个正式的沇程来评审、决貪规则违反的部分,个体程序员不得违反本规范中的相关规则。术语定义原则:编程时必须坚持的指导思想规则:编程时强制必须遵守的约定。建议:编程时必效加以考虑的约定说明:对此原则/规则/建议进行必要的解释。示例:对此原则/规则/建议从好、不好两个方面给出例子。延伸阅读材料:建议进一步阅读的参考材料。常量不变的值更易于理餡、跟踪和分析,所以应该尽可能地使用常量代替变量,定义值的时侯,应该把 const作为默认的选项规则1.1使用 const常量取代宏华为机密,未经许可不得扩散第页共页se语言编程规范内部公开说明:宏是简单的文本替换,在预处理阶段时完成,运行报错时直接报相应的值;跟踪调试时也是显示值,而不是宏名;宏没有类型检查,不安全;宏没有作用域。示例defi: e MAX MSISDN LEN(20)//不好的例子const int MAX MSISDN LEN=20;/好的例子规则1.2一组相关的整型常量应定义为枚举说明:之所以使用枚举,基于:●枚举比# define或 const int更安全,因为编译器会检查参数值是否是否位于枚举取值范围内,从而避免错误发生。示例//好的例子enum DayofWeek( sunday, monday, tuesday, wednesday, thursday, friday, saturday)ienum Ccloriblack, blue, whiter red, purp_e]BOOL CclorizeCalendar (DayofWeek today, Color todays Color)Coorizeca1 endor(b1ue, sunday);//编译报错,1ue和 Sunday位置错误//不好的例子:const int sunday=0iconst int monday= 1const int b⊥acKconst int blueBOOL CclorizeCalendar (int today, int todays ColorCoorizecalendar(blue, sunday);//不会报错当枚举值需要对应到具体数值时,须在声明时昰示赋值。否则不需要昰式赋值,以避免重复赋值,降低维护(增加、朋除成员)工作量示例好的例子:s协议里定义的设备I值,用于标识设备类型cnum TDcv-cclypcDEV UNKNOWN --l,DEV DSMP 0DEV工SMGDEV WAPPORTAL=2程序内部使用,仅用于分类的情況,不应该进行显式的赋值。示例/好的例子:程序中用来标识会话状态的枚举定义enum TSessionstateSESSION STATE INITISESSTON STATE CTOSEDSESSION STATE WA工TING●应当尽量避免枚举值亘复,如必须重复也要用己定义的枚举来修饰,例如:typed f enumRTCP SR 200,RTCP MIN TYPE RTCP SR//must be lowest known typeRTCP RR华为机密,未经许可不得扩散第页共页se语言编程规范内部公开RTCP SDES= 202RTCP BYE203,RTCP APP204,RTCP RTPFB=205RTCP PSEB =206/RTCP XR207RTCP RSI =208RTCP PUBPCRTS =209RTCP MAX TYPF= RTCP PUB PORTS //must be highest known typertcp type ti规则1.3不相关的常量,即使取值一样,也必须分别定义说明:一个常量只用来表示一个特定功能,即一个常量不能有多种用途。示例:/好的例子:协议和协议B,于机号( (MSISDN)的长度都是20。unsigned const int. A MAX MST SDN LEN0;unsigned const int B MAX MSI SDN LEN 20//或者使用不同的名字空间namespace alibunsigned const int MAX MSISDN LEN=20;namespace blibunsigned const int MAX MSISDN LEN =20建议1.1尽可能使用 const说明:在声明的变量或参数前加上关键字 const用于指明变量值不可被篡改。类成员函数加上 const限定符表明该函数不会修改类成员变量的状态使用 const常见的场景:函数参数:传递引用时,如果函数不会修改传入参数,该形参应声明为 const。成员函数:访问函数(如get函数):不修改任何数据成员的函数:未调用非 cons t函数、未返回数据成员的非 const指针或引用的函数。数据成员:如果数据成员在对象构造之后个再发生变化,可将其定义为 cons t。2初始化和类型转换声明、定义与初始化规则2.1禁止用 memcpy、 memset初始化非POD对象说明:PO全称是“ Plain0 ld Data”,是C++98标准(ISO/IEC14882, first edition,19980901)中引入的一个概念,POD类型主要包括int,char, float, double, enumeration,woid,指针等原始类型及其集合类型,不能使用封装和面对对象特性(如用户定义的构造/赋值/析构函数、基类、虚函数等)。华为机密,未经许可不得扩散第页共页se语言编程规范内部公开由于非P0D类型比如非集合类型的 class对象,可能存在虚函数,内存布局不确定,跟编译器有关,滥用内存拷贝可能会导致严重的问题即使对集合类型的 class,使用直接的内存拷贝和比较,破坏了信息隐蔽和数据保护的作用,也不提倡memcpy、 memset操作示例:×××产品程序异常退出( corc dump)。经过现场环境的模似,程序产生 COREDUMP,其原因是:在初始化函数内使用 memset(this,0,sizeof(*this))进行了类的初始化,将类的虚函数表指针被清空,从而导致使用空指针。解决方案:使用C艹构造函数初始化,不要便用 memset函数初始化类对象建议2.1变量使用时才声明并初始化说明:变量在使用前未赋初值,是常见的低级编程错误。使用前才声明变量并同时初始化,非常方便地避免了此类低级错误。在函数开始位置声明所有变量,后面才使用变量,作用域覆盖整个函数实现,容易导致如下问题:程序难以理解和维护:变量的定义与使用分离变量难以合理初始化:在函数丌始时,经常没有足够的笮息进行变量初始化,往往用某个默认的空值(比如零)来初始化,这遥常是一种浪费,如果变量在被赋于有效值以前使用,还会导致错误。遵循变量作用域最小化原则与魷近声明原则,使得代码更容易阅读,方便了解变量的类型和初始值特别是,应使用初始化的方式替代声明再赋值示例:不好的例子:声明与初始化分离string name;//声明时未初始化:调用缺省构造函数nane=" zhangsan";//再次调用赋值操作符函数;声明与定义在不同的地方,理解相对困难好的例子:声明与初始化一体,理解相对容易string name(" zhangsan");//调用一次构造函数建议2.2避免构造函数做复杂的初始化,可以使用“init”函数说明:正如函数的变量都在函数内部初始化一样,类数据成员最好的初始化场所就是构造函数,数据成员都应该尽量在构造函数中初始化以下情况可以使用init(函数来初始化:需要提供初始化返回信息。数据成员初始化可能抛异常。●数据成员初始化大败会造成该类对象初始化失败,引起不确定状态数据成员初始化依赖this揞针:构造凶数没结束,对象就没有构造出来,构造凶数內不能使用this成员数据成员初始化需要调用虚函数。在构造函数和析构函数中调用虚函数,会导致未定乂的行为示例:数据成员初始化可能拋异常:cl ass CPPRule华为机密,未经许可不得扩散第页共页se语言编程规范内部公开publicCEPRule(): size (0), res (null)i//仅进行值初始化long init (int size)//根据传入的参数初始化size,分配资源resr vateint siResourceptrx res//使用方法CPPRule ait(100)建议2.3初始化列表要严格按照成员声明顺序来初始化它们说明:编译器会按照数据成员在类定义中声明的顺序进行初始化,而不是按照初始化列表中的顺序,如果打乱初始化列表的顺序实际上不起作用,但会造成阅读和理解上的混淆;特别是成员变量之间存在依赖关系时可能导致BUG示例://不好的例子:初始化顺序与声明顺序不一致class Emp-oyeepublic:Employee(const charx firstName, const charx lastNamefirstName (firstName), lastName (lastName)r email (firstName.+-astName t huawei. com)ipr-vate:string email, firstName lastName类定义emai1是在 firstName, lastName之前声明,它将首先初始化,但使用了未初始化的ratNam和 lastName,导致错误。在成员声明时,应按照成员相互依赖关系按顺序声明。建议2.4明确有外部依赖关系的全局与静态对象的初始化顺序说明:如果全尻对象A的成员变量有外部依赖,比如依赖另外一个全局变量B,在A的构造函数中访问B,隐含的规则就是B先于A初始化,然而全局与静态对象的初始化与析构顺序未有严格定义,无法确保B已经完成初始化,而每次生成可执行程序都可能发生变化,这类BUG难以定位。通常采用单件( Singleton)模式或者把有依赖关系的全局对象放在一个文件中定义来明确初始化顺序冋一个文件屮,若全局对象a在全局对象b之前定义,则a一定会在b之前初始化;但是不同文件中的全局对象就没有固定的初始化顺序。可以在main0或 pthread once(内初始化一个运行期间不回收的指针类型转换避免使用类型分支来定制行为:类型分支来定制行为容易出错,是企图用C+编写C代码的明显标志。这是一种很不灵活的技术,要添加新类型时,如果忘记修改所有分支,编译器也不会告知。使用模板和虚函数,让类型自己而不是调用它们的代码来决定行为。华为机密,未经许可不得扩散第页共页
- 2020-12-12下载
- 积分:1