自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 如果把ape转换成mp3

朋友喜欢听贝多芬的交响乐,可是网上能够下载的都是ape无损格式的,可能大家的耳朵都很灵敏,不喜欢mp3格式,但是朋友手中的机器只能兼容mp3,因此我寻找一款可以ape->mp3的软件。网上google的结果,是有一篇ape->mp3转换软件的评测文章,里面提到了mediacoder和foobar。我先安装了mediacoder,这款软件人机界面太差,选项繁多,排列无序,而且在转换过程中经常提示

2008-12-07 01:20:00 621

原创 MP3Gain

今天发现了一款软件MP3Gain,能够把一批MP3文件的音量进行均衡,这样制作的音乐CD光盘的音量不会忽大忽小。

2008-09-28 01:32:00 324

原创 MP3Gain

今天发现了一款软件MP3Gain,能够把一批MP3文件的音量进行均衡,这样制作的音乐CD光盘的音量不会忽大忽小。

2008-09-28 01:31:00 380

原创 MP3Gain

今天发现了一款软件MP3Gain,能够把一批MP3文件的音量进行均衡,这样制作的音乐CD光盘的音量不会忽大忽小。

2008-09-28 01:31:00 362

原创 如何用Zoundry在Hotmail中写博客

基本上国内的博客都不支持zoundry离线撰写,因此我找到了google的blogger和microsoft的livespace,blogger被国内的GFW给封锁了,无法离线管理,因此livespace成了唯一的选择。用zoundry联系管理livespace,关键是做好配置。1、更改livespace的网址,为你的livespace起一个名字,这个名字一旦确定,就不能更改了。2、在电子

2008-09-26 21:15:00 464

原创 快速制作视频DVD

编写文章竟然会丢失,看来浏览器真是不可靠,应该使用离线博客工具编写。不想再重新码一遍字了,简要说一下。不要使用 ulead movie factory进行dvd制作,格式转换速度太慢。推荐使用tmpgenc系列产品。tmpgenc plus 2.x进行格式转换在高级视频设置里把图像放置方式选择为:满屏显示(保持宽高比)tmpgenc dvd author 2.x不支持字幕导入,因此使用3.x进行制

2008-09-23 21:45:00 512

原创 maxthon和firefox

从2000年左右开始,我就一直使用ie,去年开始使用遨游(maxthon),不过maxthon经常死机的问题老师困扰我,特别是在单位的机器上,一死机之后,我强行关闭,maxthon进程经常还保留在系统中,而且占据著100%的CPU,必须用任务管理器把它关闭才行,特别费事。可是单位的内网必须用ie才能正常显示,所以我只能享受著maxthon带来的便利的同时,也必须忍受着它的缺点。今天无意中发现了fi

2007-11-21 22:39:00 863

原创 还是Acdsee

新买了一个数码相机,在埃及照了许多相片,很久没有使用过看图软件了,印象中好像acdsee总是启动速度慢,比较臃肿,电脑中一直安装的是acdsee V2的版本,功能比较弱,不能够根据相片中的exif信息,自动旋转图片,浏览起来非常费劲,我有很多竖拍的相片。在网上找到一个faststone的看图软件支持自动旋转,家里的机器试用感觉还行,结果到单位的计算机(配置较低)感觉打开图片的速度非常慢,性能较

2007-10-20 11:29:00 770 1

原创 LaTeX是精灵还是恶魔

我这个人在技术方面总是有些偏执,对一些复杂的实物和自己不了解的软件总充满着好奇。前天在论坛上看到有人讨论LaTeX,想起前两年曾经琢磨过,但是一直没有使用过,这次好奇心又被勾了起来。www.ctex.org 是一个LaTeX的重要的论坛。看过一些文章之后,知道了一些要点:1、LaTeX是排版系统,它引以为豪的是“所想即所得”和word的“所见即所得”有着本质的区别,但是学习曲线比较高,主要为一

2007-10-19 21:34:00 1244 1

原创 More Effective C++ 条款28(下)

条款28:灵巧(smart)指针(下)      译者注:由于我无法在文档区贴上图片(在论坛询问,结果无人回答),所以只能附上此译文的word文档。下载这种技术能给我们几乎所有想要的行为特性。假设我们用一个新类CasSingle来扩充MusicProduct类层次,用来表示cassette singles。修改后的类层次看起来象这样:现在考虑这段代码:template       

2001-12-18 08:18:00 1112

原创 More Effective C++ 条款28(中)

 条款28:灵巧(smart)指针(中) 测试灵巧指针是否为NULL目前为止我们讨论的函数能让我们建立、释放、拷贝、赋值、dereference灵巧指针。但是有一件我们做不到的事情是“发现灵巧指针为NULL”:SmartPtr ptn; ... if (ptn == 0) ...                    // error! if (ptn) ...

2001-12-12 09:42:00 1045

原创 More Effective C++ 条款28(上)

 条款28:灵巧(smart)指针(上)灵巧指针是一种外观和行为都被设计成与内建指针相类似的对象,不过它能提供更多的功能。它们有许多应用的领域,包括资源管理(参见条款9、10、25和31)和重复代码任务的自动化(参见条款17和29)当你使用灵巧指针替代C++的内建指针(也就是dumb pointer),你就能控制下面这些方面的指针的行为:构造和析构。你可以决定建立灵巧指针时应该怎么

2001-12-07 10:57:00 1008

原创 More Effective C++ 条款27(下)

条款27:要求或禁止在堆中产生对象(下)到目前为止,这种逻辑很正确,但是不够深入。最根本的问题是对象可以被分配在三个地方,而不是两个。是的,栈和堆能够容纳对象,但是我们忘了静态对象。静态对象是那些在程序运行时仅能初始化一次的对象。静态对象不仅仅包括显示地声明为static的对象,也包括在全局和命名空间里的对象(参见条款47)。这些对象肯定位于某些地方,而这些地方既不是栈也不是堆。它们的位置

2001-11-15 22:21:00 1104

原创 More Effective 条款27(上)

条款27:要求或禁止在堆中产生对象(上)本文含有图片,无法贴上,请下载WORD文档阅读。下载有时你想这样管理某些对象,要让某种类型的对象能够自我销毁,也就是能够“delete this.” 很明显这种管理方式需要此类型对象要被分配在堆中。而其它一些时候你想获得一种保障:“不在堆中分配对象,从而保证某种类型的类不会发生内存泄漏。”如果你在嵌入式系统上工作,就有可能遇到这种情况,发生在嵌入式系

2001-11-15 22:20:00 945

原创 More Effective C++ 条款25

技巧本书涉及的大多数内容都是编程的指导准则。这些准则虽是重要的,但是程序员不能单靠准则生活。有一个很早以前的卡通片叫做“菲利猫”(Felix the Cat), 菲利猫无论何时遇到困难,它都会拿它的trick包。如果一个卡通角色都有一个trick包,那么C++程序员就更应该有了。把这一章想成你的trick包的启动器。当设计C++软件时,总会再三地受到一些问题的困扰。你如何让构造函数和非成员

2001-11-05 11:44:00 1160

原创 More Effective C++ 条款26(下)

条款26:限制某个类所能产生的对象数量(下) 允许对象来去自由我们知道如何设计只允许建立一个实例的类,我们知道跟踪特定类的对象数量的工作是复杂的,因为在三种不同的环境中都可能调用对象的构造函数,我们知道消除对象计数中混乱现象的方法是把构造函数声明为private。还有最后一点值得我们注意:使用thePrinter函数封装对单个对象的访问,以便把Printer对象的数量限制为一个,这样做的同

2001-11-05 11:40:00 910

原创 More Effective C++ 条款26(上)

 条款26:限制某个类所能产生的对象数量(上)你很痴迷于对象,但是有时你又想束缚住你的疯狂。例如你在系统中只有一台打印机,所以你想用某种方式把打印机对象数目限定为一个。或者你仅仅取得16个可分发出去的文件描述符,所以应该确保文件描述符对象存在的数目不能超过16个。你如何能够做到这些呢?如何去限制对象的数量呢?如果这是一个用数学归纳法进行的证明,你会从n=1开始证明,然后从此出发推导出其

2001-11-05 11:38:00 1197

原创 More Effective C++ 条款23

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

2001-10-29 21:34:00 1185

原创 More Effective C++ 条款24

条款24:理解虚拟函数、多继承、虚基类和RTTI所需的代价此文包含一些图片,无法贴到文档区,所以我把word文档压成zip文件放在了文件交流区,请下载阅读,请下载C++编译器们必须实现语言的每一个特性。这些实现的细节当然是由编译器来决定的,并且不同的编译器有不同的方法实现语言的特性。在多数情况下,你不用关心这些事情。然而有些特性的实现对对象大小和其成员函数执行速度有很大的影响,所以对于这些

2001-10-28 22:00:00 1730

原创 More Effective C++ 条款22

 条款22:考虑用运算符的赋值形式(op=)取代其单独形式(op)大多数程序员认为如果他们能这样写代码:x = x + y;                    x = x - y;那他们也能这样写:x += y;                       x -= y;如果x和y是用户定义的类型(user-defined type),就不能确保这样。就C++来说,op

2001-10-25 21:57:00 1097

原创 More Effective C++ 条款21

 条款21:通过重载避免隐式类型转换以下是一段代码,如果没有什么不寻常的原因,实在看不出什么东西:class UPInt {                                 // unlimited precisionpublic:                                       // integers 类  UPInt(); 

2001-10-25 21:55:00 970

原创 More Effective C++ 条款20

条款20:协助完成返回值优化一个返回对象的函数很难有较高的效率,因为传值返回会导致调用对象内的构造和析构函数(参见条款19),这种调用是不能避免的。问题很简单:一个函数要么为了保证正确的行为而返回对象要么就不这么做。如果它返回了对象,就没有办法摆脱被返回的对象。就说到这。考虑rational(有理数)类的成员函数operator*:class Rational {public:

2001-10-20 16:37:00 1019

原创 More Effective C++ 条款18

 条款18:分期摊还期望的计算在条款17中,我极力称赞懒惰的优点,尽可能地拖延时间,并且我解释说懒惰如何提高程序的运行效率。在这个条款里我将采用一种不同的态度。这里将不存在懒惰。我鼓励你让程序做的事情比被要求的还要多,通过这种方式来提高软件的性能。这个条款的核心就是over-eager evaluation(过度热情计算法):在要求你做某些事情以前就完成它们。例如下面这个模板类,用来表示放有大

2001-10-18 23:13:00 893

原创 More Effective C++ 条款19

条款19:理解临时对象的来源当程序员之间进行交谈时,他们经常把仅仅需要一小段时间的变量称为临时变量。例如在下面这段swap(交换)例程里:templatevoid swap(T& object1, T& object2){  T temp = object1;  object1 = object2;  object2 = temp;}通常把temp叫做临时变量。

2001-10-18 23:00:00 1124

原创 More Effective C++ 条款17

 条款17:考虑使用lazy evaluation(懒惰计算法)从效率的观点来看,最佳的计算就是根本不计算,那好,不过如果你根本就不用进行计算的话,为什么还在程序开始处加入代码进行计算呢?并且如果你不需要进行计算,那么如何必须执行这些代码呢?关键是要懒惰。还记得么?当你还是一个孩子时,你的父母叫你整理房间。你如果象我一样,就会说“好的“,然后继续做你自己的事情。你不会去整理自己的房

2001-10-17 10:22:00 767

原创 More Effective C++ 条款16

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

2001-10-14 23:36:00 805

原创 More Effective C++ 条款15

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

2001-10-13 15:51:00 728

原创 More effective C++ 条款14

 条款14:审慎使用异常规格(exception specifications)毫无疑问,异常规格是一个引人注目的特性。它使得代码更容易理解,因为它明确地描述了一个函数可以抛出什么样的异常。但是它不只是一个有趣的注释。编译器在编译时有时能够检测到异常规格的不一致。而且如果一个函数抛出一个不在异常规格范围里的异常,系统在运行时能够检测出这个错误,然后一个特殊函数unexpected将被自动地

2001-10-10 22:38:00 729

原创 More effective c++ 条款10(上)

条款10:在构造函数中防止资源泄漏(上)如果你正在开发一个具有多媒体功能的通讯录程序。这个通讯录除了能存储通常的文字信息如姓名、地址、电话号码外,还能存储照片和声音(可以给出他们名字的正确发音)。为了实现这个通信录,你可以这样设计:class Image {                        // 用于图像数据public:  Image(const string& image

2001-10-10 18:26:00 776

原创 More effective c++ 条款10(下)

条款10:在构造函数中防止资源泄漏(下) 你可能已经注意到BookEntry构造函数的catch块中的语句与在BookEntry的析构函数的语句几乎一样。这里的代码重复是绝对不可容忍的,所以最好的方法是把通用代码移入一个私有helper function中,让构造函数与析构函数都调用它。class BookEntry {public:  ...                      //

2001-10-10 18:24:00 785

原创 More effective C++ 条款12

条款12:理解“抛出一个异常”与“传递一个参数”或“调用一个虚函数”间的差异 从语法上看,在函数里声明参数与在catch子句中声明参数几乎没有什么差别:class Widget { ... };                 //一个类,具体是什么类                                      // 在这里并不重要void f1(Widget w);    

2001-10-08 21:32:00 922

原创 More effective C++ 条款13

 条款13:通过引用(reference)捕获异常当你写一个catch子句时,必须确定让异常通过何种方式传递到catch子句里。你可以有三个选择:与你给函数传递参数一样,通过指针(by pointer),通过传值(by value)或通过引用(by reference)。我们首先讨论通过指针方式捕获异常(catch by pointer)。从throw处传递一个异常到catch子句是一

2001-10-08 21:31:00 813

原创 More Effective C++ 条款11

条款11:禁止异常信息(exceptions)传递到析构函数外在有两种情况下会调用析构函数。第一种是在正常情况下删除一个对象,例如对象超出了作用域或被显式地delete。第二种是异常传递的堆栈辗转开解(stack-unwinding)过程中,由异常处理系统删除一个对象。在上述两种情况下,调用析构函数时异常可能处于激活状态也可能没有处于激活状态。遗憾的是没有办法在析构函数内部区分出这两种情况

2001-10-06 23:33:00 894

原创 More Effective C++ 条款9

 异常C++新增的异常(exception)机制改变了某些事情,这种改变是深刻的,彻底的,可能是令人不舒服的。例如使用未经处理的或原始的指针变得很危险。资源泄漏的可能性增加了。写出具有你希望的行为的构造函数与析构函数变得更加困难。特别小心防止程序执行时突然崩溃。执行程序和库程序尺寸增加了同时运行速度减少了。这就使我们所知道的事情。很多使用C++的人都不知道在程序中使用异常,大多数人不知道如

2001-10-02 16:56:00 895

原创 More Effective C++ 条款8

 条款8:理解各种不同含义的new和delete人们有时好像喜欢故意使C++语言的术语难以理解。比如说new操作符(new operator)和operator new的区别。当你写这样的代码:string *ps = new string("Memory Management");你使用的new是new操作符。这个操作符就象sizeof一样是语言内置的,你不能改变它的含义,它

2001-10-01 09:46:00 1138

原创 More Effective C++ 条款7

条款7:不要重载overload &&, ||, or ,. 与C一样,C++使用布尔表达式简化求值法(short-circuit evaluation)。这表示一旦确定了布尔表达式的真假值,即使还有部分表达式没有被测试,布尔表达式也停止运算。例如:char *p;...if ((p != 0) && (strlen(p) > 10)) ...这里不用担心当p为空时strlen

2001-09-28 22:36:00 983

原创 More Effective C++ 条款6

条款6:自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别很久以前(八十年代),没有办法区分++和--操作符的前缀与后缀调用。这个问题遭到程序员的报怨,于是C++语言得到了扩展,允许重载increment 和 decrement操作符的两种形式。 然而有一个句法上的问题,重载函数间的区别决定于它们的参数类型上的差异,但是不论是increment或dec

2001-09-27 23:04:00 879

原创 More Effective C++ 条款5

 条款5:谨慎定义类型转换函数C++编译器能够在两种数据类型之间进行隐式转换(implicit conversions),它继承了C语言的转换方法,例如允许把char隐式转换为int和从short隐式转换为double。因此当你把一个short值传递给准备接受double参数值的函数时,依然可以成功运行。C中许多这种可怕的转换可能会导致数据的丢失,它们在C++中依然存在,包括int到short

2001-09-25 23:50:00 1072

原创 More Effective C++ 条款4

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

2001-09-24 22:46:00 850

原创 More Effective C++ 条款3

条款3:不要使用多态性数组类继承的最重要的特性是你可以通过基类指针或引用来操作派生类。这样的指针或引用具有行为的多态性,就好像它们同时具有多种形态。C++允许你通过基类指针和引用来操作派生类数组。不过这根本就不是一个特性,因为这样的代码根本无法如你所愿地那样运行。 假设你有一个类BST(比如是搜索树对象)和继承自BST类的派生类BalancedBST:class BST { ...

2001-09-23 21:15:00 1116

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除