2007年04月01日

http://zzpomelo.cublog.cn/

2006年12月07日

cmd.exe–-CMD命令提示符
chkdsk.exe–-Chkdsk磁盘检查
certmgr.msc–证书管理实用程序
calc—-启动计算器
charmap–-启动字符映射表
cliconfg–SQL SERVER 客户端网络实用程序
Clipbrd–-剪贴板查看器
conf—-启动netmeeting
compmgmt.msc---计算机管理
cleanmgr–整理
ciadv.msc–--索引服务程序

dxdiag–--检查DirectX信息
drwtsn32–-- 系统医生
devmgmt.msc--- 设备管理器
dfrg.msc–磁盘碎片整理程序
diskmgmt.msc---磁盘管理实用程序
dcomcnfg–打开系统组件服务
ddeshare–打开DDE共享设置
dvdplay–-DVD播放器

eventvwr–事件查看器
eudcedit–造字程序
explorer–打开资源管理器

fsmgmt.msc–-共享文件夹管理器

gpedit.msc–-组策略

iexpress–木马捆绑工具,系统自带

logoff–注销命令
lusrmgr.msc–本机用户和组

mstsc–远程桌面连接
mem.exe–-显示内存使用情况
Msconfig.exe---系统配置实用程序
mplayer2–简易widnows media player
mspaint–-画图板
mplayer2–媒体播放机
magnify–-放大镜实用程序
mmc—--打开控制台
mobsync–-同步命令

net stop messenger–-停止信使服务
net start messenger–开始信使服务
notepad–-打开记事本
nslookup–网络管理的工具向导
ntbackup–系统备份和还原
narrator–屏幕“讲述人”
ntmsmgr.msc–移动存储管理器
ntmsoprq.msc---移动存储管理员操作请求
netstat -an–(TC)命令检查接口
 
osk—--打开屏幕键盘
odbcad32–ODBC数据源管理器
oobe/msoobe /a–检查XP是否激活

packager–对象包装程序
perfmon.msc–计算机性能监测程序
progman–-程序管理器

rononce -p –15秒关机
regedit.exe–注册表
rsop.msc–组策略结果集
regedt32–注册表编辑器
regsvr32 /u *.dll–停止dll文件运行
regsvr32 /u zipfldr.dll–--取消ZIP支持

syncapp–-创建一个公文包
sysedit–-系统配置编辑器
sigverif–文件签名验证程序
sndrec32–录音机
shrpubw–-创建共享文件夹
secpol.msc–-本地安全策略
syskey–--系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
services.msc---本地服务设置
Sndvol32–音量控制程序
sfc.exe–-系统文件检查器
sfc /scannow---windows文件保护

tsshutdn–60秒倒计时关机命令
tourstart–xp简介(安装完成后出现的漫游xp程序)

utilman–-辅助工具管理器

wmimgmt.msc–打开windows管理体系结构(WMI)
wupdmgr–-windows更新程序
write–---写字板
winmsd–--系统信息
wiaacmgr–扫描仪和照相机向导
winchat–XP自带局域网聊天
winver–--检查Windows版本

2006年11月15日

1岁出场亮相,
10岁天天向上,
20岁远大理想,
30岁基本定样,
40岁处处吃香,
50岁发奋图强,
60岁告老还乡,
70岁打打麻将,
80岁晒晒太阳,
90岁躺在床上,
100岁挂在墙上!

2006年11月14日

 

异常处理

                                  Danny Kalev
                                                

翻译:  cppbug  

cpp_bug@hotmail.com

简介

大型应用软件往往是分层构建的。在最底层你会发现库函数,API函数,和私有的

底层函数。然而在最高层则是用户接口组件,比如一个电子制表软件让用户填写

数据表单。下面来看一种普通的航空订票系统:它的最高端是由一些GUI组件所组

成,用来在用户的屏幕上显示内容。这些高端组件与那些封装了数据库API的数据

存取对象相互作用。再往底层一些,那些数据库API与数据库引擎相交互,然而数

据库引擎自己又会调用系统服务来处理底层的硬件资源,比如物理内存,文件系

统和安全模型。一般情况下,及其严格的运行期错误会在这些底层代码中被检测

出来,但是它们不能—–或者说不应该—-试图自己处理这些错误。解决这些严

格的运行期错误的责任应该由高端组件来承担。为了解决一个错误,高端组件必

须得到错误发生的通知。本质上,错误处理包括错误检测和通知高端组件。这些

组件依次处理错误并且试图从错误中恢复。

传统的错误处理方法
在早些时期,C++本身并没有处理运行期错误的能力。取而代之的是那些传统的C

方法。这些方法可以被归为三类设计策略:
返回一个状态码来表明成功或失败
把错误码赋值给一个全局标记并且让其他的函数来检测
终止整个程序
上述的任何一个方法在面向对象环境下都有明显的缺点和限制。其中的一些根本

就不可接受,尤其是在大型应用程序中。接下来的部分将会仔细检查一下这些方

法,目的是发现他们与生俱来的限制和危险性。

返回一个错误码

在某种程度上这个方法是有用的,比如一个小型程序有着一致而且有限的错误码

存在,并且严格的报告错误和检查一个函数返回值的策略被应用。然而,这种方

法也有着显著的局限性;例如,错误类型和它们的列举值必须标准化。因为一个

库的实现者可能选择返回值0来代表一个错误,然而另一个实现者却选择0来代表

成功并且用那些非0值代表出现错误。通常,那些返回码会在一个公共头文件中以

符号常量的形式存在,从而在整个软件的开发过程中或者在一个开发团队里达成

一致。但是,这些码并不是标准的。
不用说,在结合那些不兼容的软件库的时候,如何处理非标准的错误码将会是一

件极其头疼的事。另外一个缺点是对于每一个返回码都必须查阅和解释——一

个乏味并且昂贵的操作。这个策略的实现需要调用者在每一次调用的时候对返回

值进行检查,如果没有这样做将会导致运行期错误。当一个错误码被检测,就会

终止正常的执行流程并且把错误码传递给调用者。那些附加的包裹每一个函数调

用的代码会很轻易的使程序的大小翻倍并且引起软件维护和程序可读性的降低。

更糟的是,有时要想返回一个error value是不可能的。例如,构造函数没有返回

值,所以就不能应用这种方法在对象构造失败的情况下报告错误。

求助于全局标记
一个可以选择的用来报告运行期错误的途径是使用全局标记,它表明了最后的操

作是否成功。不像返回码策略,这个方法是标准化的。C 的<errno.h>头文件中定

义了一种机制用来检查和给一个全局整型标记errno赋值。这种策略固有的缺陷也

是不能被忽视的。在一个多线程环境中,被一个线程赋予了一个错误码的errno有

可能不经意的被另一个线程所改写,而调用者还未对errno进行检查。另外,对错

误码而不是一个更为可读的信息的使用是很不利的,因为那些错误码可能会在不

同的环境中不兼容。最终,这种方法需要严格的良好的编程样式,也就是不断的

对errno的当前值进行检查。
全局标记策略和函数返回值策略是相似的:二者都提供一种机制来报告错误,但

是二者却都不能保证错误被处理。例如,一个函数没有成功打开一个文件可以通

过给errno赋予一个合适的值来表明错误的发生。然而,它不能阻止另一个函数试

图写入和关闭那个文件。更进一步,如果errno表明一个错误并且程序员检测到而

且按照预期处理了它,那么errno还应该被显式的复位。如果一个程序员忘记了做

这件事,那么将会引起其他函数误以为错误还没有被处理,从而去校正那个问题

,引起不可预知的结果。

终止程序
最为残酷的处理运行期错误的方法是简单的终止程序。这种解决方案去除了上面

两种方法的一些缺点;例如,没有必要反复的检查每个函数返回值的状态,而且

程序员也不必赋值给一个全局标记,反复的测试和清除它的值。在标准C的函数库

中有两个函数用来终止一个程序:exit()和abort()。exit()被调用能够表明程序

被成功终止,或者它可以在遇到运行期错误的时候被调用。在把控制权交还给运

行环境之前,exit()首先会清空流和关闭打开的文件。abort()却不一样,它表示

程序被意外终止,不会清空流和关闭打开的文件。
关键性的程序不应该在任何运行期错误存在的情况下突然终止。如果一个生命支

持系统突然停止工作仅仅是因为它的控制器检测到0做除数,那么将是一种灾难。

同样,一个控制由人驾驶的航天飞机自动运行的计算机系统也不应该因为暂时的

和地面控制系统失去联系就停止工作。类似的,电话公司的账目系统或者银行系

统都不应该在运行期错误出现的时候就中止。健壮的真实世界的应用程序应该做

的更好。
程序终止甚至对于应用程序都是有问题的。一个检测到错误的函数通常都没有必

要的信息来衡量错误的严重性。例如一个内存分配函数并不能说出内存分配失败

是由于用户正在使用调试器,网页浏览器,电子制表软件,文字处理软件,还是

由于系统因为硬件错误变得不稳定。在第一种情况下,系统可以简单的显示一条

信息来告诉用户关闭不必要的应用程序。第二种情况下,就需要一种更为残酷的

措施了。然而,在终止程序的策略下,那个内存分配函数就会简单的终止程序,

而不考虑错误的严重性。这种方法在一些关键性应用程序中是无法应用的。好的

系统设计应该保证运行期错误被检测和报告,但是它也应该确保最小限度的容错

水平。
终止程序在极限环境下或者在调试阶段是可以被接受的。然而,abort()和exit()

却不应该在面向对象环境中使用,甚至即使在调试阶段,因为他们并没有意识到

C++对象模型的存在。

exit()和abort()不销毁对象
对象可以持有从构造函数或者某个成员函数中获得的资源:从free store中分配

的内存,文件句柄,通信端口,I/O设备等等。这些资源必须在适当时候被释放。

通常,资源都是由析构函数来释放。这种设计方法被称为resource

initialization is acquisition。在栈上建立的局部对象会自动销毁。然而

abort() 和exit()并不调用这些局部对象的析构函数。因此,程序的意外终止将

会引起无法挽回的损害:数据库被破坏,文件可能丢失,并且一些有价值的数据

可能丢失。基于这个原因,请不要在面向对象环境中使用abort()和exit()。

进入异常处理
正如你所见,传统C的错误处理方法并不适合C++,C++的一个设计目标就是让用

C++进行大规模软件开发比C更好更安全。
C++的设计者们已经意识到缺乏合适的错误处理机制使得实现这一目标相当的困难

。他们试图寻找一种完全摆脱C的错误处理缺陷的解决方案。其中的一种想法就是

建立在当异常被触发的时候程序自动把控制权传递给系统。机制必须简单,并且

它能够使程序员从不断的检查一个全局标记或者返回值的苦差事中解脱出来。另

外,它还必须保证异常处理程序能够自动获得异常信息。最终它还要确保当一个

异常没有在本地处理的时候,本地对象能够被适当的销毁,并且把它所持有的资

源释放。
1989年,在多年的研究和多方建议下,异常处理进入C++。C++并不是第一个对结

构化运行期错误处理进行支持的语言。早在20世纪60年代,PL/1就提供了一种内

建的异常处理机制;Ada也在20世纪80年代提供了自己的异常处理,另外还有几种

语言也做到了这一点。但是这些异常处理模型没有一个适合C++对象模型和程序结

构。因此,被提议的C++异常处理是独一无二的,并且它已经作为了一种模型出现

在一些新产生的语言之中。
异常处理机制的实现被证明是一种挑战。第一个C++编译器,cfront,在UNIX环境

下运行。和许多UNIX编译器一样,它首先是作为一个翻译器把C++代码转换成C,

接着再编译C代码。Cfront 4.0计划引入异常处理,然而,异常处理机制的实现是

如此的复杂,以至于cfront 4.0的开发团队在用了一年时间设计它之后完全的放

弃了这个项目。Cfront 4.0再也没有出台。然而,异常处理却成为了标准C++的有

机组成部分。后来出现的一些编译器都支持了它。在接下来的部分里将会解释为

什么在cfront以及任何编译器下实现异常处理是如此的困难。

实现异常处理所面临的挑战
实现异常处理所遇到的困难主要来自于以下几个因素:第一,实现必须保证对于

某一异常的合适的handler被找到。
第二,异常对象必须是多态的;这样,当实现无法通过派生类对象定位handler的

时候可以考虑基类的handler。这种需要表明必须引入运行期类型检测。然而那时

C++还没有任何运行期类型检测的能力。因此这种能力必须首先被实现。
作为一个附加的复杂性,实现必须能够调用所有局部对象的析构函数。这个过程

被称为stack unwinding 。因为早期的C++编译器首先要把C++源文件转换为纯C,

然后再把C代码编译成机器码。异常处理的实现者们不得不用C来实现运行期类型

鉴别和stack unwinding。幸运的是,这些障碍已经被克服。

应用异常处理
异常处理是一种灵活并且精巧的工具。它克服了C的传统错误处理方法的缺点并且

能够被用来解决一系列运行期错误。但是,异常处理也像其他语言特性一样,很

容易被误用。为了能够有效的使用这一特性,理解运行期机制是如何工作的以及

相关的性能花费是非常重要的。接下来的部分里将会进入异常处理的内部并且论

证如何使用这一工具来建立安全的应用系统。

异常处理要素
异常处理是一种把控制权从异常发生的地点转移到一个匹配的handler的机制。异

常是内建数据类型变量或者是对象。异常处理机制包括四个部分:a try block,

一个或多个和try block相关的handler,throw表达式,以及异常自己。Try

block包含可能抛出异常的代码。例如:
 try
{
 int * p = new int[1000000]; //may throw std::bad_alloc
}
一个try block后面将跟有一个或多个catch语句或者说是handlers, 每一个

handler 处理不同类型的异常。例如:
try
{
 int * p = new int[1000000]; //may throw std::bad_alloc
 //…
}
catch(std::bad_alloc& )
{
}
catch (std::bad_cast&)
{
}
handler仅仅被在try block中的throw表达式以及函数所调用。throw表达式包括

一个关键字throw以及assignment expression。例如:
try
{
 throw 5; // 5 is assigned to n in the following catch statement
}
catch(int n)
{
}
throw表达式和返回语句很相似。empty throw是没有操作数的throw语句。例如:

throw;

在handler中的empty throw表明它在重新抛出异常,后面我们会讨论到它。另外

,如果目前没有异常被处理,那么执行一个empty throw将会调用terminate()。

Stack Unwinding
当一个异常被抛出,运行时机制首先在当前的作用域寻找合适的handler。如果不

存在这样一个handler,那么将会离开当前的作用域,进入更外围的一层继续寻找

。这个过程不断的进行下去直到合适的handler被找到为止。此时堆栈已经被解开

,并且所有的局部对象被销毁。如果始终都没有找到合适的handler,那么程序将

会终止。注意,C++保证局部对象被适当的销毁仅仅是在抛出的异常被处理的情况

下。一个未被扑获得异常是否引起局部对象的销毁由实现决定的。为了保证局部

对象的析构函数在异常未被捕获情况下也能够被正常调用,你应该在main()里加

入捕获任何异常的catch语句。例如:
int main()
{
  try
  {
    //…
  }
  catch(std::exception& stdexc)   // handle expected exceptions
  {
    //…
  }
  catch(…)   // ensure proper cleanup in the case of an uncaught

exception
  {
  }
  return 0;
}
stack unwinding的过程就好比一个返回语句序列,每一个都返回相同的对象给它

的调用者。

传递异常对象给handler
一个异常能够按值或者按引用的方式传递给它的handler。为异常对象分配的内存

是通过一种未被定义的途径(但是并没有在自由存储区)。一些实现使用专门的

异常堆栈,在那里,异常对象被创建。当一个异常按引用的方式传递,handler获

得是在异常堆栈上建立的对象的引用。通过引用方式传递异常保证了它的多态行

为。按值传递的异常被建立在调用者的堆栈上。例如:
#include  <cstdio>
class ExBase {/*…*/};
class FileEx: public ExBase {/*…*/};
void Write(FILE *pf)
{
  if (pf == NULL) throw FileEx();
  //… process pf normally
}
int main ()
{
  try
  {
    Write(NULL); //will cause a FileEx exception to be thrown
  }
  catch(ExBase& exception) //catch ExBase or any object derived from it
  {
  //diagnostics and remedies   }
}
按值传递异常将会造成反复的复制对象,并且它的花费是昂贵的,因为异常对象

在匹配的handler被找到以前会被构造和销毁许多次。然而,在比较罕见的情况下

也会发生按值传递,由于为了保持应用系统的整体性,性能考虑往往被放在了第

二位。

异常类型匹配
异常的类型决定了哪个handler能够捕获它。异常的匹配规则比函数重载的匹配规

则更为严格。考虑下面这种情况:
try
{
  throw int();
}
catch (unsigned int) //will not catch the exception from the previous

try-block
{  
}
抛出异常的类型是int型,然而handler却期待一个unsigned int。异常处理机制

不认为二者是能够匹配的类型;结果,抛出的异常没有被捕获。异常匹配规则仅

仅允许一个非常有限的转换集。对于一个异常E和一个带有T或T&参数的handler,

符合下面的条件可以进行匹配:
T和E是同一类型(const 和volatile被忽略)
T是E的没有歧义的公共基类
如果E和T都是指针类型,当二者的类型相同时可以进行匹配或者E所指向对象的类

型公有无歧义的继承自T指向对象的类型。

作为对象的异常
正如你所发现的,传统的通过返回一个整型错误码的方法在OOP中已经不再适用。

C++异常处理机制提供了更多的弹性,安全性和稳固性。一个异常既可以是int 或

char等基本类型,也可以是更为丰满的对象,有着数据成员和成员函数。这样一

个对象可以为handler提供更多的选择进行恢复。一个聪明的异常对象,可以通过

成员函数返回错误的详细描述,而不是让handler查阅某个表或文件。它也可以拥

有在错误被适当处理之后使程序从运行期错误中恢复的成员函数。考虑有这样一

个日志类想要添加新的纪录到一个已存在的日志文件中:如果打开日志文件失败

,它会抛出一个异常。当它被匹配的handler所捕获,异常对象能够拥有一个成员

函数,这个成员函数建立一个对话框。操作者可以从对话框中选择恢复方法,包

括建立一个新的日志文件,选择另一个日志文件,或者是允许系统在没有日志的

情形下运行。

Exception Specification
一个函数可以通过指定一个它所能抛出的异常列表来提醒它的用户。Exception

specifications在用户只能看到函数的原型但是却无法获得它的源文件的时候将

会十分的有用。下面是一个指定异常的例子:

class Zerodivide{/*..*/};
int divide (int, int) throw(Zerodivide);   // function may throw an

exception
                                           // of type Zerodivide, but

no other

如果你的函数永远不会抛出任何异常,它可以像下面这样声明:
bool equals (int, int) throw(); //no exception is thrown from this

function

注意一个函数被声明为没有exception specification例如:
bool equals (int, int);

Exception specification在运行期生效
一个exception specification不会在编译期被检查,而是在运行期。当一个函数

试图抛出一个在exception specification中未被指定的异常的时候,异常处理机

制将会检测到这种违规并且调用标准函数unexpected()。unexpected()的默认行

为是调用terminate()终止程序。违背exception specification就好比是一个bug

,不应该发生,这就是为什么默认行为是终止程序。不过默认的行为也可以被改

变,通过使用函数set_unexpected()。
因为exception specifications在运行期才有效,所以编译期可能会故意忽略那

些违背exception specifications的代码。好比下面:
int f();    // no exception specification, f can throw any type of

exception
void g(int j) throw()    // g promises not to throw any exception at

all
{
  int result = f(); // if f throws an exception, g will violate its

guarantee
                    //not to throw an exception. still, this code is

legal
}
在上面这个例子中,函数g()并不允许抛出任何异常。它调用函数f(),然而f()却

可能抛出任何异常因为它没有exception specification。如果f()抛出一个异常

,它将会通过g()传播出去,但是这却破坏了g()不会抛出任何异常的保证。这也

许看起来会很奇怪,有一些违背在编译期就应该被发现报错的,为什么一定要等

到运行期呢?然而许多问题并不像想象的那么简单,以下几个原因就要求必须采

用运行期检测策略。在前面的那个程序中,f()可能是一个被遗留下来的C函数。

我们不可能强迫每个C函数有exception specification。并且因为这个原因就强

迫程序员在g()中写不必要的try和catch(…)块也是不实际的。通过强迫

exception specification只在运行期才有效,C++采取了“信任程序员”的策略

而不是强加负担给程序员和实现。

Exception specification的一致性
C++需要派生类中的exception specification与基类保持一致。这意味着派生类

的virtual function重载函数的exception specification必须是基类的限制性子

集,例如:
// various exception classes
class BaseEx{};
class DerivedEx: public BaseEx{};
class OtherEx {};
class A
{
public:
  virtual void f() throw (BaseEx);
  virtual void g() throw (BaseEx);
  virtual void h() throw (DerivedEx);
  virtual void i() throw (DerivedEx);
  virtual void j() throw(BaseEx);
};
class D: public A
{
public:
  void f() throw (DerivedEx); //OK, DerivedEx is derived from BaseEx
class D: public A
{
public:
  void f() throw (DerivedEx); //OK, DerivedEx is derived from BaseEx
  void g() throw (OtherEx);  //error; exception specification is
                             //incompatible with A’s
  void h() throw (DerivedEx); //OK, identical to the exception
                              //specification in base
  void i() throw (BaseEx); //error, BaseEx is not a DerivedEx nor is it
                           //derived from DerivedEx
  void j()  throw (BaseEx,OtherEx); //error, less restrictive than the
                                    //specification of A::j
};
};
相同的一致性限制也应用于函数指针。一个拥有exception specification函数指

针只能被赋予一个有着相同或更为局限的exception specification的函数。这说

明一个没有exception specification的函数指针不能被赋予一个有exception

specification的函数。注意,因为exception specification不能被认为是函数

类型的一部分,因此你不能声明两个仅仅是exception specification不同的函数

。例如:
void f(int) throw (Y);
void f(int) throw (Z); //error; redefinition of ‘void f(int)’
同样的原因,声明一个包含exception specification的typedef也是错误的:
typedef void (*PF) (int) throw(Exception); // error

在对象构造和销毁时出现异常
构造函数和析构函数被自动调用,并且它们不能够利用返回值来表明发生运行期

错误。从表面上看,在对象构造和销毁时抛出一个异常似乎是报告运行期错误的

最好方法。但事实上你还必须考虑一些额外的因素。你尤其应该对从析构函数中

抛出异常保持警惕。

从析构函数中抛出异常是危险的
从析构函数中抛出异常是不应该被推荐的,这是因为一个析构函数可能会在另一

个异常进行stack unwinding的时候被调用,在这种情况下,异常处理机制就会调

用terminate()终止程序。如果你真的想从一个析构函数中抛出异常的话,一种可

取的做法是首先检查一下是否还有未被捕获的异常存在。

检查未被捕获的异常
一个异常被捕获是在它相应的handler被找到的情况下。为了检查一个异常是否被

捕获,你可以使用标准函数uncaught_exception()(它被定义在标准头文件

<stdexcept>)。例如:
class FileException{};
File::~File() throw (FileException)
{
   if ( close(file_handle) != success) // failed to close current file?
  {
    if (uncaught_exception()  == true ) // is there any uncaught

exception
                                        //being processed currently?
       return;  // if so, do not throw an exception
    throw FileException(); // otherwise, it is safe to throw an

exception
                           // to signal an error
  }
  return; // success
}
然而,一个更好的选择是直接在析构函数内部处理异常,而不是让他们扩散到外

面。例如:
void cleanup() throw (int);
class C
{
public:
  ~C();
};
C::~C()
{
  try
  {
    cleanup();
  }
  catch(int)
  {
    //handle the exception within the destructor
  }
}
如果一个异常被函数cleanup()抛出,那么它在析构函数内部就被处理。否则,被

抛出的异常就会传播到析构函数的外部,并且如果这个析构函数是在stack

unwinding 的过程中被调用,那么程序将会通过terminate()的调用而终止。

全局对象:构造和销毁
我们都知道,全局对象的构造发生在程序开始之前。因此,任何从全局对象的构

造函数中抛出的异常将不会被捕获。这一点对于全局对象的析构函数也是一样的

—–全局对象的析构函数在程序结束之后被运行。因此,一个从全局对象的析构

函数中抛出的异常也不会被捕获。

高级异常处理技术
简单的try-throw-catch模型可以被扩展来处理更为复杂的运行期错误。这一节将

会讨论一些更为高级的异常处理技术,包括异常层次,重新抛出异常,function

try blocks以及auto_ptr 类。

标准异常
C++定义了一个标准异常层次,当在运行时发生反常情形时抛出。标准异常类从

std::exception(在<stdexcept>头文件中定义)派生。这一层次使得应用程序能

够在单一的catch语句中捕获这些异常:
catch (std::exception& exc)
{
  // handle exception of type std::exception as well as
  //any exception derived from it
}
那些通过语言内建操作符抛出的标准异常是:
std::bad_alloc     //by operator new
std::bad_cast     //by operator dynamic_cast < >
std::bad_typeid   //by operator typeid
std::bad_exception   //thrown when an exception specification of
所有的标准异常都提供了成员函数what(),它返回一个用来描述异常细节的字符

串。注意,标准库还有另外一个被它的组件抛出的的异常集合。

异常处理层次
异常在一个自下向上的层次中捕获:派生层次越深的异常越先被处理,例如:
#include <stdexcept> 
#include <iostream>
using namespace std;
int main()
{
  try
  {
      char * buff = new char[100000000];
      //…use buff
  }
  catch(bad_alloc& alloc_failure)   // bad_alloc is
                                         //derived from exception
  {
    cout<<"memory allocation failure";
    //… handle exception thrown by operator new
  }
  catch(exception& std_ex)
  {
    cout<< std_ex.what() <<endl;
  }
  catch(…)  // exceptions that are not handled elsewhere are caught

here
  {
    cout<<"unrecognized exception"<<endl;
  }
  return 0;
}
派生层次越深的handler必须出现在其基类的前面。这是因为handler的匹配过程

是按照出现的顺序进行的。因此有可能某个handler永远不会被执行,例如,把一

个处理派生类异常的handler放在处理基类异常的handler的后面。例如:
catch(std::exception& std_ex) //bad_alloc exception is always handled

here  
{
  //…handle the exception
}
catch(std::bad_alloc& alloc_failure)   //unreachable
{
  cout<<"memory allocation failure";
}

重新抛出异常
异常的抛出表明了一种反常的状态。先捕获到异常的handler试图解决这个问题,

但是它如果没有成功或者只完成了部分恢复,那么它可以重新抛出这个异常,让

更高一层的try block来处理它。基于这种目的,try blocks可以在一个分等级的

顺序上进行嵌套,使得一个从低层重新抛出的异常能够被重新捕获。重新抛出用

一个没有操作数的throw语句来表示。例如:
#include <iostream>
#include <string>
using namespace std;
enum {SUCCESS, FAILURE};
class File
{
  public: File (const char *) {}
  public: bool IsValid() const {return false; }
  public: int OpenNew() const {return FAILURE; }
};
class Exception {/*..*/}; //general base class for exceptions
class FileException: public Exception
{
  public: FileException(const char *p) : s(p) {}
  public: const char * Error() const { return s.c_str(); }
  private: string s;
};
void func(File& );
int main()
{
  try //outer try
  {
    File f ("db.dat");
    func;   // 1
  }
catch(…) // 7
  //this handler will catch the re-thrown exception;
  //note: the same exception type is required
  {
    cout<<"re-thrown exception caught";
  }
  return 0;
}
void func(File & f)
{
  try //inner try
  {
      if (f.IsValid() == false )
      throw FileException("db.dat");  // 2
  }
  catch(FileException &fe) // 3
//first chance to cope with the exception
  {
    cout<<"invalid file specification" <<fe.Error()<<endl;
    if (f.OpenNew() != SUCCESS) (5)
     //re-throw the original exception and let a higher handler deal

with it
    throw; // 6
  }
}
在上面的例子中,函数func()在main()中的try block里被调用(1)。第二个在

func()中的try block抛出一个FileException类型的异常(2)。这个异常被

func()内的catch block所捕获(3)。那个catch block试图通过打开一个新文件

进行补救,但是失败了(5),并且FileException异常被重新抛出(6)。最终,

那个重新抛出的异常被main()中的catch(…)所捕获(7)。

Function try Blocks
Function try blocks是一个函数体本身就含有一个try block以及它的相关

handler的函数。比如:
class Bad{};
void foo()try
{
 throw Bad();
}
catch(…)
{
 std::cout<<"error catch!!";
}
function try block使得一个handler能够捕获构造函数中以及初始化列表中发生

的异常。然而,它并不像普通异常的handler,function try block很少能够捕获

异常继续对象的构建。这是因为被部分构造的对象要被销毁。另外,一个

function try block的handler不能执行返回语句(或者说,handler必须通过一

个throw离开)。那么究竟function try block的用处是什么呢?handler使得你

可以抛出另一个异常而不是你刚才捕获的那个,这样可以阻止一个违背exception

specification的情况发生。例如:
class X{};
C::C(const std::string& s) throw (X) //  allowed to throw X only
try
: str(s) // str’s constructor might throw a bad_alloc exception,
         // might violate C’s exception specification
{
  // constructor function body
}
catch (…) //handle any exception thrown from ctor initializer or ctor

body
{
  //…
  throw X(); //replace bad_alloc exception with an exception of type X
}
在这个例子中,一个string对象首先被创建作为class c 的一个成员。String在

它的创建过程中可能抛出一个bad_alloc异常。那个function try block能够捕获

bad_alloc异常并且抛出类型为x的异常使得它满足c的构造函数的exception

specification的需要。

(…)

2006年11月10日

 

你肯定被牙痛骚扰过,你也肯定遇到过鼻出血不止的情况。当时怎么解决的?是不是仰着头,等待止血,任凭血倒灌入喉腔……其实这种方法是不对的,耐心看看下面的文章,小编教你n多家庭妙招,来对付身体的小毛病。
  
  1.换季疲劳:在季节更替的时候经常发生换季疲劳,给自己做一个“安眠枕”。在枕套下面多放些气味芬芳的杀菌植物叶片:月桂、蕨、榛树、针叶、薄荷和玫瑰花瓣。

       2.眼睛红肿:用香芹汁湿敷消除眼睛红肿,将香芹切成小细段装入纱布袋内放入开水中。过15-20分钟取出,冷却,放在眼皮上10分钟。

  3.牙齿酸痛:丁香油中的芳香物质可以消除疼痛,消灭细菌。把棉棒浸入丁香油后放到病牙上,可以帮助你缓解疼痛。

  4.打嗝:如果通常的方法(a.慢慢地大口喝一杯凉水;b.用双臂抱住自己做深吸气,然后尽量长时间屏住呼吸)不奏效,试一下用月桂叶浸液摆平打嗝。在一杯开水内放入3-4片月桂叶,浸泡一阵,每次打嗝时喝10-15滴。

  5.血管堵塞:大概酒精蒜是最好的清理血管的方法。将40克蒜捣碎,兑入100毫升白酒,放置10-15天。每日2-3次,饭前30分钟饮用,每次10滴。这种方法可以清理阻塞,让血管有弹性,还可以治疗慢性头疼。

  6.食欲过旺:藏疗法:用中指肚按住上嘴唇和鼻子之间的穴位几分钟。饭前喝一杯矿泉水或者西红柿汁。

  7.刺:如果你把自己“浸湿”,刺就会自己钻出来。先泡个热水澡,然后拿双层餐巾纸擦拭皮肤,以便挤压出刺来。另一种方法:在扎刺周围的皮肤涂上一滴植物油。它会渗入皮肤,软化刺,这时用镊子夹出或者用消毒后的针挑出。

  8.咳嗽:用酒精或者白酒按摩胸廓,使之发热,然后马上盖上一层薄的温热的药用蜡,直至冷却。使用此法帮助直至康复。

  9.头晕:不要躺下、也不要闭上眼睛,这样只会使症状恶化。红辣椒可以帮助你。倒杯热水,捏一捏辣椒末放入杯中,小口喝下。水和辣椒可以使你的血液升温,刺激血液流入大脑,头疼就缓解了。如果你的手边没有辣椒,找一个舒适的地方坐下,松开衣领,沿顺时针方向按摩太阳穴。

  10.脓包:如果脓包已经“出头”,红肿着,用消毒水已经没有用了。碘酒也不要用了,更不能挤压,否则它会更明显。用酒精(白酒、花露水)擦拭,然后混合等量牙膏和男用剃须滋润霜,将混合物涂在脓包上,等待大约15分钟,直至变干,然后小心擦掉。脓包会变小、发白。

  11.体内垃圾:用植物油涂抹身体,按摩身体大约10分钟左右,最好用专门的浴刷。然后泡个热水澡,仔细地用浴球、浴液洗去植物油。这之后毛孔打开,开始流汗排除体内垃圾。

  12.紧张:瑜珈最简单的呼吸运动可以帮助你神情自若,哪怕是上班时间也可以做。摆一个舒服的姿势:可以坐着,也可站着,慢慢地深呼吸。呼气的时间要比吸气的时间长两倍。努力集中精力,只想呼吸过程:甚至可以“听到”空气不只在肺内循环,还在肚子里循环。消除紧张情绪,这样做10分钟左右就够了。

  13.口臭:口气不清新的一个原因是口干。通常是因为吸烟,长时间聊天,情绪紧张。柠檬瓣可以帮助你摆脱口臭。把柠檬瓣放在舌头上5-7分钟,不时地吸一下。

  14.流鼻血:不能躺下,头也不能向后仰,更不能用棉球堵住鼻子。需要坐下,头稍稍往前低,最好用带冰的水袋放在鼻梁上,如果身边没有,那么把手绢用冷水沾湿,然后用手绢用力按住流鼻血的那个鼻翼2-3分钟,这时用嘴均匀呼吸。

  15.血压低:当你感觉血压开始降低时,换一个舒服的坐姿,解开衣领,顺时针按摩太阳穴。或用柠檬汁或香水几滴擦拭太阳穴。然后,可以喝一杯中等浓度的咖啡。

  16.双手出汗:通常是因为植物性导管错位,也可能是由于神经问题。每天喝30滴缬草、益母草或者芍药浸液,早上用橡树叶或者洋甘菊浸液加水(一汤勺浸液兑一升水)浸泡双手。

  17.偏头痛:经常是因为疲劳过度、室内闷热、饥饿和不安,也可能由于遗传因素造成。苹果醋蒸气浴方法可以消除或者至少是减轻头痛。在锅内放入相同数量的醋和水,用小火烧开。当开始冒蒸气时,将头低至锅上方,呼吸蒸气,吸气60-75次就可以了。

  18.烫伤:养一盆天竺葵(老鹳草),它对烫伤特别管用。在开水烫伤的时候,取新鲜的天竺葵叶子盖在伤口上,用绷带缠好。过10-12小时重复一次。通常烫伤在有限的几天里痊愈,不会留下疤痕和斑点。

  19.关节: (1)当关节刚刚开始酸痛时,取新鲜的圆白菜叶,在菜叶内部涂上蜂蜜。用它做护膝包住膝盖(最好借助于有弹力的绷带),直到酸痛停止再取下来。(2)在锅内将普通的沙子炒热后放在脚跟处,这样关节自己就会变热。这个配方特别适合痛风,但是,有静脉曲张的情况不适用。

  20.眼四周细小皱纹:用大拇指按压眼睛外角1厘米处的穴位,每个穴位每分钟按3次。

  21.醉后不舒服感:在躺下睡觉前喝几杯水(最好是蜂蜜水):它会帮助你减轻第二天早上的痛苦。如果早上起来还是感觉不舒服,那么,无论是药片,还是盐溶液都帮不了你,贴个芥末膏在小腿上,在额头上放块冰。过半小时你的症状就会减轻。

  22.黑眼圈:如果你的黑眼圈不是因为慢性疾病,而是因为睡眠不足,用沾了凉浓咖啡(3汤勺咖啡兑100克开水)的湿布敷在黑眼圈部位。咖啡因是非常好的血管收缩剂,这种方法青光眼患者禁用。

  23.预防感冒:如果你准备牛奶咖啡和三明治做早餐,可以在每片粗粮面包上涂薄薄一层黄油和2-3瓣捣碎的蒜。蒜层上还可以放些干酪和蔬菜。这样的早餐的秘密在于:蒜可以消灭所有的细菌,而牛奶咖啡可以消除蒜味。

  24.掉头发:擦碎一个洗净的土豆,榨出土豆汁,加入2汤勺芦荟汁和20克蜂蜜。把这种混合物转圈涂在头部皮肤上,用毛巾将头发包2个小时,然后仔细洗净。每周进行这种疗法两次,会获得效果。

  25.嗓子痛:当你刚刚着凉,感觉嗓子发痒和嗓子不舒服时,用两茶勺苹果醋兑入一杯凉开水中。喝掉三分之一,其余的每小时漱口一次。通常一昼夜疼痛就会消失。

  26.吸烟:正确的排除体内尼古丁的方法:取2-3汤勺燕麦(可以带壳),洗净,倒入2-3升水中。然后用小火烧开后再煮15-20分钟。然后把锅包起来,放在暖和的地方一昼夜,过滤后,放入冰箱。每日服3次,每次120克,饭前半小时服用。

  27.失眠:如果你经常失眠,那么准备些薰衣草香精油或者普通的新鲜柠檬。睡前半小时在灯泡上滴上1-2滴薰衣草香精油或者柠檬汁,挥发的物质作用于大脑,使身体放松、镇定。

2006年09月27日

2006年中国软件收入规模前100家企业名单

                                                 单位:万元

 

序号
企 业 名 称
软件收入
序号
企 业 名 称
软件收入
1
华为技术有限公司
1520629
26
用友软件股份有限公司
100076
2
海尔集团公司
760699
27
大唐电信科技股份有限公司
87300
3
中兴通讯股份有限公司
636000
28
福州福大自动化科技有限公司
80839
4
UT斯达康通讯有限公司
598554
29
思爱普(北京)软件系统有限公司
80345
5
神州数码(中国)有限公司
462188
30
广州金鹏电子有限公司
75890
6
浙江浙大网新科技股份有限公司
420029
31
南京南瑞继保电气有限公司
75882
7
熊猫电子集团有限公司
406920
32
中国银联股份有限公司
74015
8
北京北大方正集团
274488
33
爱立信科技服务(中国)有限公司
70971
9
浪潮集团有限公司
259887
34
深圳市金证科技服务有限公司
70177
10
海信集团有限公司
245526
35
长春一汽启明信息技术股份有限公司
63486
11
四川长虹电子集团有限公司
231262
36
南京南瑞集团公司
63169
12
东软集团有限公司
230000
37
中铁信息工程集团有限公司
62200
13
清华同方股份有限公司
203557
38
杭州恒生电子集团有限公司
59286
14
微软(中国)有限公司
192857
39
深圳市南凌科技发展有限公司
58276
15
南京联创科技股份有限公司
171968
40
株洲南车时代电气股份有限公司
58241
16
中国软件与技术服务股份有限公司
165906
41
金蝶软件(中国)有限公司
58000
17
青岛朗讯科技通讯企业有限公司
150977
42
国电南瑞科技股份有限公司
55579
18
山东中创软件工程股份有限公司
146550
43
上海贝尔阿尔卡特股份有限公司
55395
19
中国民航信息网络股份有限公司
135021
44
威海北洋电气股份有限公司
54522
20
上海宝信软件股份有限公司
133682
45
沈阳东大自动化有限公司
53926
21
北京甲骨文软件系统有限公司
132199
46
太极计算机股份有限公司
52808
22
珠海炬力集成电路设计有限公司
125750
47
云南南天电子信息产业股份有限公司
51579
23
中冶赛迪工程技术股份有限公司
124450
48
大恒新纪元科技股份有限公司
49917
24
北京华胜天成科技股份有限公司
112700
49
北京四方继保自动化股份有限公司
48796
25
烟台东方电子信息产业集团有限公司
108672
50
长江计算机(集团)公司
48651
 

序号
企 业 名 称
软件收入
序号
企 业 名 称
软件收入
51
北京青鸟信息系统有限公司
46530
76
创智集团  (湖南)
33352
52
深圳迈瑞生物医疗电子股份有限公司
46437
77
深圳市同洲电子股份有限公司
32893
53
北京东华合创数码科技股份有限公司
45911
78
福建南威软件工程发展有限公司
32869
54
石化盈科信息技术有限责任公司
44898
79
泰豪软件股份有限公司
32850
55
中控科技集团有限公司
44810
80
北京乐金系统集成有限公司
32807
56
中盈优创资讯科技有限公司
42608
81
福建榕基软件开发有限公司
32223
57
亿阳信通股份有限公司
42075
82
先锋软件股份有限公司
31996
58
华立集团有限公司  (浙江)
40392
83
江西捷德智能卡系统有限公司
31866
59
北京握奇数据系统有限公司
40323
84
中科软科技股份有限公司
31837
60
日电信息系统(中国)有限公司
39989
85
江苏金智科技股份有限公司
31526
61
北京和利时系统工程股份有限公司
39860
86
沈阳西东控制技术有限公司
31010
62
上海华讯网络系统有限公司
39815
87
广东新粤交通投资有限公司
29813
63
广州海格通信产业集团有限公司
39763
88
首都信息发展股份有限公司
28310
64
大连华信计算机技术有限公司
39446
89
广州华南资讯科技有限公司
28094
65
希姆通信息技术(上海)有限公司
38888
90
赛尔网络有限公司
27945
66
沈阳先锋计算机工程有限公司
38000
91
南望信息产业集团有限公司
27344
67
北京富通东方科技有限公司
37976
92
京华网络有限公司
27008
68
亚信科技(中国)有限公司
37710
93
福建新大陆电脑股份有限公司
27000
69
沈阳新松机器人自动化股份有限公司
36540
94
上海新华控制技术(集团)有限公司
26119
70
华迪计算机有限公司
36223
95
上海禹华通信技术有限公司
25803
71
福建富士通信息软件有限公司
35225
96
福建星网锐捷通讯股份有限公司
25781
72
浙江大华技术股份有限公司
34923
97
麦迪实软件(昆山)有限公司
25030
73
江苏南大苏富特软件股份有限公司
34428
98
广州市数控设备有限公司
24832
74
云南电信网信实业集团有限公司
33574
99
北京中科希望软件股份有限公司
23706
75
杭州士兰微电子股份有限公司
33429
100
上海复旦光华信息科技股份有限公司
23289
2006年09月16日

超级喜欢这款机机,口水忍了好久了,不行了….

贴张照片日夜思念~

 

2006年08月13日

超级大富豪:年收入在5000万以上

大富豪:年收入在1000—5000万

富豪:年收入在300—1000万之间

富人:年收入在100—300万之间

高产者:年收入在30—100万之间

中产者:年收入在15—30万之间

低产者:年收入在8—15万之间

穷 人:年收入在3—8万之间

很穷的人:年收入在1—3万之间

非常穷的穷人:年收入在5千—1万之间

穷得没衣服穿的人:年收入在1千—5千之间

穷得求生不得求死不能的穷人:年收入在100 —1000元之间

穷得几乎要死的穷人:年收入在30—100元之间

死路一条的穷人:年收入在30元以下

 

-_-’   俺不是穷人,而是很穷的人啊…… 

555

2006年08月05日

50. 经典桌面

这个名叫东子的偏执狂不知花了多少
工夫,mydeskcity.com的内容量达到
了40G,很多图片都是站长本人在国
外搜集后,自己进行加工的作品。

http://www.mydeskcity.com/

=================================

49. 画猪头

在指定的对话框里面随便画一个猪头,
然后点击“提交”,之后会得到一份
关于你的个性的报告。当然大部分都
是臭骂你的话,但是在你之前已经有
965,541个人乐滋滋地找骂了……
http://drawapig.desktopcreatures.com/
=================================

48. 射精计算器

科学是严谨的,因此有人搞出了这么
一个在线计算器:把你每周的次数和
每次的大致距离填写进去,会得到你
已经射了多少米、死了多少精虫的统
计数据。

http://strongbad.surrealistic.net/ejaculator.php

=================================

47. 通缉犯

这里是全英国最危险的通缉犯发布榜,
到目前为止还没见到一个女性(怎么
搞的女同志们?撑起半边天来嘛!)
你可以参照这里的照片躲开危险,也
可以亲自去捉住在逃犯领取1万英镑
的奖金。

http://www.mostwanted-uk.org/

=================================

46. 粗口集合

为了表达对粗口和暴力精神的崇敬,
对因殴打老婆而锒铛入狱的著名艺人
Ross Kemp的欣赏和遗憾,他的Fans
整了这么一个只有他的头像和他“名
言”的网站,相当搞笑,堪称英文粗
口经典集合。

http://www.rosskemp.co.uk/
=================================

45. 最简洁网站

有谁能想到这么一个全部内容都被数
字包含的网站,能挤进这个伟大的网
站专题?但它的简洁把我们征服了,
另外,它还有难能可贵的幽默感和恐
怖的科学精神……

http://3.141592653589793238462643383279502…0974944592.com/

=================================

44. 超级装备

通过巨大的照片,了解当今最牛的跑
车。

http://www.topgear.com/

=================================

43. 烂番茄

最近各种电影网站如同雨后春笋一般
纷纷冒出头来,但是这个始终是最好
的一个:这里评选出的是最烂的片子,
并用“一般烂、很烂、超级烂”这样
的级别给它们分类。参评作品中甚至
还包括了一些电视游戏。

http://www.rottentomatoes.com/
=================================

42. 魔术吧

街头魔术联盟(Street Magic Union),
简称“SMU”。这里由一群魔术爱好者
自发组织的团体。为所有热爱魔术的
人们提供了窥探和偷技的阵地。

http://www.magic8.cn/

=================================

41. 省钱网

天才的理财网,名气和好评迅速彪升,
电视台专门为了它开了一档节目。在
这里主持人Martin Lewis手把手教给
你从租DVD到缴水费省钱的各种方法。

http://www.moneysavingexpert.com/

=================================

40. 电影随便看

只要在这里下载一个免费软件,请你
精于电脑的同事帮忙装好,全世界的
电影就都成为你的囊中之物。无论它
们是老片子还是现在正在播放的片子,
记住手要快,因为很快会有人过来叫
你把它们删掉。

http://www.bittorrent.com/
=================================

39. 免费电话

走到全世界的任何地方,都可以拨打
免费的电话。对!一分钟也不用花,
只要你装了Skype的这个软件,同时
你也叫你的通话伙伴装上它。把耳麦
和电脑接好,开始国际长途电话粥吧!

http://www.skype.com/

=================================

38. 故事会

变态而又真实的各种故事--如果不
是版面限制,我们将很乐于把它们都
登出来。比如“用头盔抵挡海鸥的进
攻”、“护士偷看成人录像被开除”,
只要是见到"Quirkies"的字样点进去
就好。

http://www.ananova.com/news
=================================

37. 坏女孩

海湾战争中,美国女兵Lynndie用手比
划成枪的样子,指着伊拉克战犯的“
那话儿”,这张照片成为人们永远不
能忘记的一幕。这个网站也许是为了
“纪念”她,搞了这个“模仿Lynndie"
的活动,全世界的人都在作出那个姿势。

http://www.badgas.co.uk/

=================================

36. 爆笑电视

如果你已经厌倦了现在的电视节目,
不妨到这里下载每周一次Ricky的这
档爆笑节目。每周一通过Rodcast开
始播出一直持续周五。
http://www.guardian.co.uk/rickygervais
=================================

35. 网上电影院线

口气很大的在线看电影网站。多偏门
的艺术电影、地下导演视频采访,都
能一一找到。众多视频美女积极参与,
只为赢得知名导演电影中的一个角色。
其实很多哥儿们去那不图别的,打着
艺术青年的口号,热爱艺术电影,也
热爱美女视频。

http://www.filmof.com/

=================================

34. 管子音乐

一个毫无意义但用来打发时间却很不
错的网站。重新安置那些管子,然后
开动机器,欣赏自己创作出来的音乐
--确实让人着迷。

http://www.lecielestbleu.com/media/pateasonframe.htm

=================================

33. 肮脏美学

一个相当不错的KB网站,比起它来,
大多数号称“天下第一KB网站”的
网站都显得志大才疏。

http://www.sickarts.com/

=================================

32. 内衣女人

Soho们的福音:这个内衣网站有着非
常优秀的摄影、非常迷人的模特和非
常性感的内衣,更重要的是你再也不
用面红耳赤地去帮老婆买内衣了。

http://www.agentprovocateur.com/
=================================

31. 解谜之王

我们在不知不觉中花了好多个小时来
解决这个巨大的解谜游戏,它里面充
满了各式各样令人绞尽脑汁的迷题和
谜语,还内置了很多经典的小游戏。

http://www.ridiculopathy.com/crappy_flash_…name=carnyville
=================================

30. Prank Mail

“想发匿名骚扰邮件吗?想让你的同
事以为自己中了100万吗?”这真是
一个邪恶的网站,可以提供各式各样
的骚扰服务,好在,大多都是善意的。

http://www.sharpmail.co.uk/

=================================

29. 交友

你是一个孤独的人?到这个只接受可
信朋友注册的网站来看看(而不是随
意上QQ上搜一个名为“小甜甜”的90
多岁老奶奶)。顺便说一句,帕米拉
·安德森也是这里的会员。

http://www.friendster.com/

=================================

28. 淘宝?NO!踏宝!

如你所知,《男人装》编辑大多是马
大哈,编辑老陈更是糊涂蛋中的上品,
某日,他准备登录淘宝网,没成想少
打了个O,结果就出来了这么个玩意
儿。内容如何暂且不谈,光是这个首
页的创意就挺值得赞赏。

http://www.tabao.com/

=================================

27. 伤疤大赛

男人就喜欢显摆自己的伤疤,因此应
该找个地方让他们比比看。在这里,
有这种嗜好的人可以找到全世界的对
手,不过别忘了,你“六岁时从火车
上掉下来”留下的伤疤和这里的前十
名相比看起来可能只是一个小针眼而
已。

http://www.scarmageddon.com/
=================================

26. 金色视频

就如同在你的电脑上开通了六万个电
视频道一样,你只要点点鼠标就可以
观看到各种电视节目,从体育到戏剧。
这里有100万小时的剪辑供你免费观看。

http://www.blinkx.tv/
=================================

25. 疯狂的手指

一个极为简单但是极令人着迷的游戏,
就是要看你能在多短时间内打完26个
字母,然后把你的成绩转给同事们看,
然后看着他们拼命敲键盘。我们的记
录?6.4秒。但据说最高记录是在1.001
秒内敲完了26个字母,是不是地球人
啊,他!

http://frenzy.morpheme.co.uk/frenzy/

=================================

24. 眼睛的幻觉

德国某大学的科学家们贡献了这个神
奇的眼睛魔术网站,在这里你可以体
验“空间频率扭曲”,实际上那只是
“你的眼睛背叛了你的心”而已。

http://www.michaelbach.de/ot/index.html

=================================

23. 全球富人榜

把你的收入水平打进去,看看你在地
球的财富排行中数老几。你很有可能
会惊奇地发现,确实你是属于高收入
人群,同阿布在一起!

http://www.globalrichlist.com/
=================================

22. IT造谣

他们自称是:中国最牛B的IT造谣网站,
扯牛B企业的蛋,满足网友变态的需求……
不过,在他们自己做的调查中,有30%
的网友认为该网站是个垃圾,应该关掉。

http://www.ztmnb.com/

=================================

21. 掘宝

据我们所知,掘宝网是世界上第一个
严肃认真地购买线索资料进行宝藏发
掘的网站。他们悬赏10万英镑寻找一
个不知道被埋在什么地方的方盒子……
当然,这一切都是个游戏。

http://www.perplexcity.com/
=================================

20. 讲话泡泡

著名的广告人Lee为各种广告编写了
15000条广告语,并把它们画在各种
对话气球中。最近他把它们放在网上,
有些极为搞笑。

http://www.thebubbleproject.com/
=================================

19. 可笑的脸

用吃奶的力气做个鬼脸,然后拍成照
片传到网上。结果?结果你得到一个
印着你的头像的杯子,而你的脸比杯
子把儿弯曲得还厉害。

http://www.shakeskin.com/

=================================

18. 女尸解剖游戏

脱就一脱到底!可是,想想看,除去
外套和蕾丝内衣之后,你还能继续脱
掉这个女孩身上的什么吗?如果之前
被告之是她的头发、面皮、骨头、子
宫、肠子……还敢将游戏进行到底吗?
说实话,变态和恶心的程度算不上高,
但要把她身上的零件都拿光,还真够
麻烦的。
http://www.mmsjoy.com/flash/1180_1.htm?800
=================================

17. 跑光啦!

这个网站的引人之处就在于那些酒后
出丑的姑娘们的照片。

http://www.partyflashers.com/
=================================

16. MP3问答

把你最喜欢的乐队名字写进去,然后
玩一个10回合的小游戏,把正在播放
的歌名正确猜对。

http://www.scenta.co.uk/games/whats_that_song.cfm

=================================

15. 射门

一个与众不同的足球游戏:挑选你愿
意参加的联赛和队伍,你在游戏中每
进一球,都将给自己的联盟加上一分。

http://www.playforyourclub.com/

=================================

14. 跳舞的傻瓜

我们猜测,叫每个打开此网页的人都
哈哈大笑是站长的目的。上传或者选
择一个头像,然后选择一个身体,再
然后就让这个小兄弟在你的屏幕上不
停地跳舞吧!

http://www.muglets.com/

=================================

13. 养盒子

这个游戏有一点点抽象,但是却很好
玩:按照符合逻辑的顺序,用不同的
道具来建设这个盒子,顺序正确它就
会逐步长成为……不知道什么东西,
我们的逻辑思维还没那么好。

http://www.eyemaze.com/grow/cube/

=================================

12. 淘宝贝

在一些男性会为之发疯的好玩具、小
物件儿出现在商店里之前,它们极有
可能会出现在这里。这里的东西有
“第一人称射击单车控制器”还有能
够把你的PC、PS2和XBOX连到一起的
连接装置……欢迎来到天堂!

http://www.engadget.com/

=================================

11. 扑克先生

《男人装》编辑部最热爱的体育项目
之一就是扑克牌,因此我们正好知道
一个不错的扑克网站。你每天都可以
坐在自己的办公桌后面于7万名其他
的扑克爱好者们在线拼杀……

http://www.partypoker.com/

=================================

10. 偷拍地球

从一个悬挂在太空、注视着地球的卫
星的角度开始,一点点放大,一直看
到大北窑的堵车状况……有点变态,
不过很好玩。有个问题:如果我们都
能看到这么多,那么军队的电脑上都
能看到什么呢?

[http://www.flashearth.com/

=================================

9. 电台天堂

建立你自己的私人电台名称(例如
“老陈FM”),输入你喜欢的波段地
址,然后就等着从电脑里飘来美妙MP3
吧!就像你从Amazon里面购买来的一样!

http://www.pandora.com/

=================================

8. 个人空间

有个美国佬最近把50多亿美金都仍在
一个网站上,由此我们可以预见到互
联网的未来。赶紧找个空间创建你自
己的天地,把你的照片、音乐传上去,
再搞点小买卖。这里已经有4000万用
户,数目相当于丹麦、瑞典、澳大利
亚和瑞士的人口总和。

http://www.myspace.com/

=================================

7. 飞虎队

网站首页上写着:这里的主要内容是
介绍香港pol.ice的特种部队--“特别
任务连”。特务连?不,是飞虎队。
虽然站长声称这不是官方网站,但里
面大量装备足以让我们飙出鼻血。

http://www.sdupro.com/index2.html

=================================

6. 照片分享

现在连照片的上传和分享都有软件可
以帮你打理完成了:下载这个免费的
软件,然后往里面填好你的链接地址,
就可以和朋友们分享了。如果你乐意,
你甚至可以把它们变成海报、画册、
甚至是邮票,当然也可以自由浏览他
人的作品。

http://www.flickr.com/

=================================

5. 安全隐私

任何人都可以登录这个网站,邮寄一
张电子贺卡,吐露心底的秘密或者偷
窥别人的秘密。浏览者可以挖掘出人
们最悲惨、最滑稽、最古怪、最疯狂
的一面。更重要的是这里的秘密最安
全。

http://postsecret.blogspot.com/
=================================

4. 秘密的Google

我们没疯:你一直点击“更多”,直
到它最终带领你进入一个全新的Google
世界。你直到通过Google你可以用一
颗卫星看到自己家的房子吗?用6GOOG
得到免费的地图、电影放映时间?把
“鱼”这个词翻译成意大利语?你不
知道,那就来试试吧!

http://www.google.com/

=================================

3. 网络精选

住在伦敦的网络老油条理查德创建了
这个网站,上面包含网络上最好的视
频剪辑、游戏、姑娘和图片。“我本
来的动机是要把邮箱里面每天收到的
各种好玩儿的东西集中起来放到网上
和朋友们分享。”他说。你在这里泡
上整整一个下午,也不一定能真正看
完这儿全部宝贝的九牛一毛。

http://www.kontraband.com/

=================================

2. 60X1

被网名传为世界最牛×的网站,它的
域名由60个1组成。在首页有一个小小
的“ENTER”健,点进去是一幅又一幅
漫画,创意一流,无懈可击。我们猜
测,这也许是个伊拉克人的作品吧……

http://www.1111111111111111111111111111111…11111111111.com
=================================

1. 冠军

我们粗略计算了一下在《男人装》编
辑部里面玩那种网上下载的小游戏的
时间,结果可以用年来计算。这里的
东西就是专门给我们这样喜欢浪费时
间的人准备的,无论是第一人称射击
游戏还是赛车游戏,基本上全都是免
费的。例如“武装直升机3”和“愤
怒机甲”,它们就是两个画面十分漂
亮的爽游戏,快和你的职业前途说
“再见”吧!

http://www.miniclip.com/

2006年07月13日

为人民服务 94.32319167E,42.54462222N
向斗争中学习 94.243125E,42.46101389N
排除万难去争取胜利 94.14704444E,42.45335556N
只争朝夕 94.26648611E,42.65985833N
毛主席万岁 94.17217222E,42.655625N
香格里拉-松赞林寺(经文) 99.69783333E,27.86808444N
珠峰 27°58′49N 86°55′14E
三峡 30°50′45"N 111°01′27"E
三门峡 34°50′N 111°21′21"E
造船厂38 56′29.92"N 121 38′37.72"E
机场41°42′15.70" N, 86°08′23.20" E
北塔山边防站45.367370,90.573400

巴黎罗浮宫: 48°51′39.61"N 2°20′10.82"E
埃及狮身人面像: 29°58′31.82"N 31° 8′15.48"E
埃及狮身人面像; 29°58′30.93"N 31° 8′15.65"E
平壤柳京大厦: 39° 2′10.87"N125°43′48.50"E
海参崴 42.8689845164N, 132.517761198E
飞机坟场 32°09′19.17N 110°49′46.69W
平壤柳京大厦: 39° 2′10.87"N125°43′48.50"E
波多黎各阿雷西博太空射电望远镜: 18°27′20.05"N 66°44′53.19"W
怀特曼空军基地; 38°43′40.89"N 93°33′21.58"W
自由女神像: 40。41′21 ”N   74。02′40”W
德国科隆大教堂: 50°56′29.57"N 6°57′30.58"E
慕尼黑安联体育场(开幕式)48.219147789,11.6263784774
柏林奥林匹克体育场(决赛)52.5133561136,13.2398110056
汉诺威AWD竞技场52.3599290703,9.73288538378
汉堡世界杯体育场53.5869222364,9.9012440719
多特蒙德维斯特法伦体育场51.4927357971,7.45381528043
超清晰图片这些人在建游泳池?? 12.19790278S,40.56329167E
看看这里,这么清楚12°20′40.48"S 40°35′11.82"E

盖尔森基奥夫沙尔克竞技场51.5537521117,7.06907863308
凯泽斯劳滕沃尔特体育场49.4337693907,7.77715096552
纽伦堡法兰克人体育场49.4259497861,11.1241851189
斯图加特戈特利布戴姆勒体育场48.7931489667,9.23328332718
莱比锡中央体育场(改建前)51.3464198348,12.3509946539
法兰克福森林体育场(改建前)50.0696330234,8.64661484093
俄国的核潜艇42.8689845164N, 132.517761198E
罗马斗兽场 41°53′24N 12°29′31E
99.69783333E,27.86808444N

香格里拉-松赞林寺(经文)
农田上的画
41°13′07.74"N 112°01′37.90"W
48°51′30.72"N 2°17′38.46"E

艾菲尔铁塔,超清析呀
布达拉宫

29°39′29.80"N
91° 6′59.23"E
40°27′09.94"N 93°44′38.28"E
甘肃西部的奇怪符号
52°20′10.87"N 0°11′43.34"W
英国伦敦正北方,一架飞行中的“兰开斯特”轰炸机
):麦田怪圈 53 31′54.33N,1 21′22.63W
赤道雪-乞力马扎罗 3° 3′53.24"S,37°20′56.85"E

黑鸟战机+航母+潜艇+战舰 40°45′52.01"N 74° 0′1.23"W

英国的巨石阵 51°10′44.32"N,1°49′43.38"W

印加遗迹:马丘比丘 13°09′48.07"S,72°32′44.69"W
37°39′56.22"N116° 1′30.90"W 大三角图案
巨大的虫子
48°51′28.85"N 10°12′18.17"E

阿联酋迪拜上的奇怪人工岛
25° 3′14.09"N 55° 4′14.67"E
34°39′10.10"N 108°58′31.80"E
传说中的圆环套圆环娱乐城?!
撞机事件
51°52′17.78"N,0°34′0.13"W
14°42′24.43"S, 75°9′11.27"W
纳斯卡地画
47.62778500 -122.24189100
比尔·盖茨的家
37°38′44.05"N115°48′6.40"W 51区
墨西哥的太阳月亮金字塔
19°41′31.55"N 98°50′36.79"W
澳洲艾尔斯巨石
25°20′46.92"S 1131°02′16.93"W
38° 54′ 11.02" N 125° 14′ 04.28" E战斗机
旧金山总部
地理坐标:37°25′19.23"N 122°05′03.20"W
莫斯科红场
地理坐标:55°45′12.93"N 37°37′13.94"E
法国巴黎埃菲尔铁塔
地理坐标:48°51′31.54"N 2°17′36.36"E
意大利罗马圣彼德大教堂
地理坐标:41°54′08.98"N 12°27′20.15"E
英国伦敦纳尔逊广场
地理坐标:51°30′30.35"N 0°07′40.22"E
北京故宫
地理坐标:39°55′00.86"N 116°23′26.93"E
澳大利亚悉尼歌剧院
地理坐标:33°51′26.07"S 151°12′56.24"E
美国纽约世贸遗址
地理坐标:40°42′40.32"N 74°00′46.12"W
美国圣海伦火山
地理坐标:46°11′13.07"N 122°11′04.48"W
非洲南部好望角
地理坐标:34°21′16.92"S 18°29′26.77"E
巴拿马运河
地理坐标
9°00′23.86"N 79°35′57.42"W
埃及金字塔
地理坐标
29°58′31.58"N 31°07′56.32"E
35°44′00"N 139°21′00"E 小日本的飞机场
37°46′18.88"N 122°18′11.42"W
36°57′29.02"N 76°19′43.30"W
50°48′07.14"N 1°06′43.73"W
50°48′31.05"N 1°05′49.17"W
43°06′36.79"N 5°53′54.18"E
30°23′45.04"N 81°24′28.31"W
32°42′38"N 117°11′23"W
50.9334895375,6.87657386777
戴维斯空军基地 Davis Monthan AFB
32.165978,-110.854884

印度被曝光的Sukhoi 30 MKI战斗机
18.5784602315, 73.9199699249

— celt8888

猫(73):里约热内卢-耶稣山 22°57′5.72"S,43°12′36.65"W
雅典-卫城 37°58′18.87"N,23°43′32.81"E
宛如龟甲-小田原城 35°15′7.56"N,139° 9′12.81"E
丰臣秀吉-大阪城 34°41′16.16"N,135°31′29.36"E

15.2985247287,19.429731165 古井

34°22′52.28"N 109°15′29.43"E
伟大的秦始皇陵
雨崩村: 28°23′47.21N 98°47′31.59E
德钦: 28°17′19.56"N 98°54′9.38"E (应该是很多年前拍的)
飞来寺: 28°19′20.51"N 98°53′23.47"E (应该是很多年前拍的)
布达拉宫: 29°39′22.46"N 91° 6′58.82"E (应该是很多年前拍的)

为人民服务 94.32319167E,42.54462222N
向斗争中学习 94.243125E,42.46101389N
排除万难去争取胜利 94.14704444E,42.45335556N
只争朝夕 94.26648611E,42.65985833N
万岁 94.17217222E,42.655625N
香格里拉-松赞林寺(经文) 99.69783333E,27.86808444N
着眼实战锤炼精兵 43°48′10.73"N 87°40′16.33"E

珠峰 27°58′49N 86°55′14E
三峡 30°50′45"N 111°01′27"E
三门峡 34°50′N 111°21′21"E
造船厂38 56′29.92"N 121 38′37.72"E
机场41°42′15.70" N, 86°08′23.20" E
北塔山边防站45.367370,90.573400

巴黎罗浮宫: 48°51′39.61"N 2°20′10.82"E
埃及狮身人面像: 29°58′31.82"N 31° 8′15.48"E
埃及狮身人面像; 29°58′30.93"N 31° 8′15.65"E
平壤柳京大厦: 39° 2′10.87"N125°43′48.50"E
海参崴 42.8689845164N, 132.517761198E
飞机坟场 32°09′19.17N 110°49′46.69W
平壤柳京大厦: 39° 2′10.87"N125°43′48.50"E
波多黎各阿雷西博太空射电望远镜: 18°27′20.05"N 66°44′53.19"W
怀特曼空军基地; 38°43′40.89"N 93°33′21.58"W
自由女神像: 40。41′21 ”N   74。02′40”W
德国科隆大教堂: 50°56′29.57"N 6°57′30.58"E
慕尼黑安联体育场(开幕式)48.219147789,11.6263784774
柏林奥林匹克体育场(决赛)52.5133561136,13.2398110056
汉诺威AWD竞技场52.3599290703,9.73288538378
汉堡世界杯体育场53.5869222364,9.9012440719
多特蒙德维斯特法伦体育场51.4927357971,7.45381528043
盖尔森基奥夫沙尔克竞技场51.5537521117,7.06907863308
凯泽斯劳滕沃尔特体育场49.4337693907,7.77715096552
纽伦堡法兰克人体育场49.4259497861,11.1241851189
斯图加特戈特利布戴姆勒体育场48.7931489667,9.23328332718
莱比锡中央体育场(改建前)51.3464198348,12.3509946539
法兰克福森林体育场(改建前)50.0696330234,8.64661484093
俄国的核潜艇42.8689845164N, 132.517761198E

美军航母 35°17′29.79"N139°39′45.91"E
美军航母 36°48′53.67"N 76°17′50.47"W
美军航母 41°31′39.30"N 71°18′58.80"W
美军航母 36°57′30.08"N76°19′44.66"W
三八线上的板门店: 37°57′21.94"N126°40′37.70"E

37 46′18.88"N 122 18′11.42"W
30 23′45.04"N 81 24′28.31"W
32 42′38"N 117 11′23"W
英国军港:
50 48′07.14"N 1 06′43.73"W
法国军港:
43 06′36.79"N 5 53′54.18"E
日本军港:
35 17′29.08"N 139 39′46.13"E
嘉义空军基地 23°27′57.36"N 120°23′30.50"E

勃兰登堡门—— 52°30′58.74"N 13°22′40.15"E

法国巴黎凯旋门: 48°52′25.39"N 2°17′42.56"E
铁塔 48°51′30.81"N 2°17′40.41"E
主体思想塔: 39° 1′4.90"N 39° 1′4.90"N

英国巨石阵:51°10′43.50"N 1°49′35.32"W

乌克兰切尔诺贝利核电站 坐标: 51°22′40.13"N 30° 5′41.37"E

世界上最有名的烂尾楼–柳京大厦 39° 2′10.87"N125°43′48.50"E

美-亚利桑那州-Barringer陨石坑 坐标: 35° 2′1.42"N 111° 1′22.25"W