Welcome 微信登录

首页 / 软件开发 / C++

了解C++异常处理的系统开支

了解C++异常处理的系统开支

了解C++异常处理的系统开支2008-01-05为了在运行时处理异常,程序要记录大量的信息。无论执行到什么地方,程序都必须能够识别出如果在此处抛出异常的话,将要被释放哪一个对象;程序必须知道每一个入口点,以便从try块中退出;对于每一个try块,他们都必须跟踪与其相关的catch子句以及这些catch子句能够捕获的异常类型。这种信息的记录不是没有代价的。确保程序满足异常规格不需要运行时的比较(runtime comparisons),而且当异常被抛出时也不...
More Effective C++:通过引用捕获异常

More Effective C++:通过引用捕获异常

More Effective C++:通过引用捕获异常2008-01-05当你写一个catch子句时,必须确定让异常通过何种方式传递到catch子句里。你可以有三个选择:与你给函数传递参数一样,通过指针(by pointer),通过传值(by value)或通过引用(by reference)。我们首先讨论通过指针方式捕获异常(catch by pointer)。从throw处传递一个异常到catch子句是一个缓慢的过程,在理论上这种方法的实现对于这个过程...
C++中禁止异常信息传递到析构函数外

C++中禁止异常信息传递到析构函数外

C++中禁止异常信息传递到析构函数外2008-01-05在有两种情况下会调用析构函数。第一种是在正常情况下删除一个对象,例如对象超出了作用域或被显式地delete。第二种是异常传递的堆栈辗转开解(stack-unwinding)过程中,由异常处理系统删除一个对象。在上述两种情况下,调用析构函数时异常可能处于激活状态也可能没有处于激活状态。遗憾的是没有办法在析构函数内部区分出这两种情况。因此在写析构函数时你必须保守地假设有异常被激活,因为如果在一个异常被激活...
More Effective C++:防止资源泄漏

More Effective C++:防止资源泄漏

More Effective C++:防止资源泄漏2008-01-05如果你正在开发一个具有多媒体功能的通讯录程序。这个通讯录除了能存储通常的文字信息如姓名、地址、电话号码外,还能存储照片和声音(可以给出他们名字的正确发音)。为了实现这个通信录,你可以这样设计:class Image { // 用于图像数据 public: Image(const string& imageDataFileName); ...};class AudioClip ...
C++语言代码检查工具PC-Lint四步速成

C++语言代码检查工具PC-Lint四步速成

C++语言代码检查工具PC-Lint四步速成2008-01-05概述PC-Lint是一个历史悠久,功能异常强劲的静态代码检测工具。它的使用历史可以追溯到计算机编程的远古时代(30多年以前)。经过这么多年的发展,它不但能够监测出许多语法逻辑上的隐患,而且也能够有效地帮你提出许多程序在空间利用、运行效率上的改进点,在很多专业级的软件公司,比如Microsoft, PC-Lint检查无错误无警告是代码首先要过的第一关,我个人觉得,对于小公司和个人开发而言,PC-...
C++启蒙之输入/输出

C++启蒙之输入/输出

C++启蒙之输入/输出2008-01-05 天极 陶刚C++没有直接定义任何用于执行输入或输出(IO)的语句。作为代替,IO是通过标准类库(standard library)提供的。IO类库提供了一个广泛的工具集合。但是,出于某些目的(包括本文中的例子),你可能需要了解一些基本的概念和操作。本文中的例子使用了iostream类库,它处理格式化输入和输出。Iostream的基础是两个类型istream和ostream,它们分别表示输入和输出流。流(strea...
More Effective C++:不要重载的操作符

More Effective C++:不要重载的操作符

More Effective C++:不要重载的操作符2008-01-05与C一样,C++使用布尔表达式简化求值法(short-circuit evaluation)。这表示一旦确定了布尔表达式的真假值,即使还有部分表达式没有被测试,布尔表达式也停止运算。例如:char *p;...if ((p != 0) && (strlen(p) > 10)) ...这里不用担心当p为空时strlen无法正确运行,因为如果p不等于0的测试失败,s...
C++启蒙之编写简单的C++程序

C++启蒙之编写简单的C++程序

C++启蒙之编写简单的C++程序2008-01-05 天极 陶刚每个C++程序都包含一个或多个函数(function),其中的一个函数的名称必须是main。一个函数由一系列执行函数功能的语句(statement)组成。操作系统通过调用main函数来执行程序。这个函数执行它的组成语句并给操作系统返回一个值。下面是一个简单的main函数,它没有返回值:int main(){return 0;}操作系统利用main函数返回的值判断程序执行成功还是失败。返回0表明...
C++中class与struct的区别

C++中class与struct的区别

C++中class与struct的区别2008-01-05很老的问题了。今天稍微总结了下,有遗漏的地方和错误的地方还望大家补充。关于使用大括号初始化class和struct如果定义了构造函数的话,都不能用大括号进行初始化如果没有定义构造函数,struct可以用大括号初始化。如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。关于默认访问权限class中默认的成员访问权限是private的,而struct中则是public的。关于继...
More Effective C++:自增和自减

More Effective C++:自增和自减

More Effective C++:自增和自减2008-01-05很久以前(八十年代),没有办法区分++和--操作符的前缀与后缀调用。这个问题遭到程序员的报怨,于是C++语言得到了扩展,允许重载increment 和 decrement操作符的两种形式。然而有一个句法上的问题,重载函数间的区别决定于它们的参数类型上的差异,但是不论是increment或decrement的前缀还是后缀都只有一个参数。为了解决这个语言问题,C++规定后缀形式有一个int类型...
More Effective C++:避免缺省构造函数

More Effective C++:避免缺省构造函数

More Effective C++:避免缺省构造函数2008-01-05缺省构造函数(指没有参数的构造函数)在C++语言中是一种让你无中生有的方法。构造函数能初始化对象,而缺省构造函数则可以不利用任何在建立对象时的外部数据就能初始化对象。有时这样的方法是不错的。例如一些行为特性与数字相仿的对象被初始化为空值或不确定的值也是合理的,还有比如链表、哈希表、图等等数据结构也可以被初始化为空容器。但不是所有的对象都属于上述类型,对于很多对象来说,不利用外部数据进...
C++类和接口的设计原则探讨

C++类和接口的设计原则探讨

C++类和接口的设计原则探讨2008-01-05我这篇文章的主旨是介绍一部分类和接口的高质量设计的准则。这些准则不但应该保证设计并且实现的类或者接口本身有高质量代码,而且更重要的是在工业领域应该尽可能的使代码的更新和维护不影响客户的活动,主要也就是保持二进制代码兼容(binary compatibility)和源代码兼容(source compatibility)。我希望这些准则能帮助刚从学校进入工业领域的朋友尽快适应更高标准的编程要求,尽快提升自己的设计...
C++中用赋值形式op=取代单独形式op

C++中用赋值形式op=取代单独形式op

C++中用赋值形式op=取代单独形式op2008-01-05大多数程序员认为如果他们能这样写代码:x = x + y; x = x - y;那他们也能这样写:x += y; x -= y;如果x和y是用户定义的类型(user-defined type),就不能确保这样。就C++来说,operator+、operator=和operator+=之间没有任何关系,因此如果你想让这三个operator同时存在并具有你所期望的关系,就必须自己实现它们。同理,ope...
C++内存管理变革

C++内存管理变革

C++内存管理变革2008-01-05引言C/C++语言的内存管理经历了几次变革,但至今仍未能趋于成熟。这几次变革主要包括:1. 从malloc/free到new/delete。这场变革是OOP技术兴起的产物。C++是强类型语言,new/delete的主要成果也就是加强了类型观念,减少了强制类型转换的需求。但是从内存管理角度看,这个变革并没有多少的突破性。2. 从new/delete到内存配置器(allocator)。自从STL被纳入C++标准库后,C++...
C/C++返回内部静态成员的陷阱

C/C++返回内部静态成员的陷阱

C/C++返回内部静态成员的陷阱2008-01-05背景在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼。这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员。如果你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存。这是一个让无数人困扰的问题。如果你一不小心,你就很有可能在这个上面犯错误。当然目前有很多解决方法,如果你熟悉一些标...
More Effective C++之考虑变更程序库

More Effective C++之考虑变更程序库

More Effective C++之考虑变更程序库2008-01-05程序库的设计就是一个折衷的过程。理想的程序库应该是短小的、快速的、强大的、灵活的、可扩展的、直观的、普遍适用的、具有良好的支持、没有使用约束、没有错误的。这也是不存在的。为尺寸和速度而进行优化的程序库一般不能被移植。具有大量功能的的程序库不会具有直观性。没有错误的程序库在使用范围上会有限制。真实的世界里,你不能拥有每一件东西,总得有付出。不同的设计者给这些条件赋予了不同的优先级。他们从...
More Effective C++之效率

More Effective C++之效率

More Effective C++之效率2008-01-05 我怀疑一些人在C++软件开发人员身上进行秘密的巴甫洛夫试验,否则为什么当提到“效率”这个词时,许多程序员都会流口水。(Scott Meyers真幽默 译者注)事实上,效率可不是一个开玩笑的事情。一个太大或太慢的程序它们的优点无论多么引人注目都不会为人们所接受。本来就应该这样。软件是用来帮助我们更好地工作,说运行速度慢才是更好的,说需要32MB内存的程序比仅仅需要16M...
<< 171 172 173 174 175 176 177 178 179 180 >>