Chinaunix首页 | 论坛 | 博客
  • 博客访问: 847888
  • 博文数量: 756
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 4980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:40
文章分类

全部博文(756)

文章存档

2011年(1)

2008年(755)

我的朋友

分类:

2008-10-13 16:14:36

给出程序:

#include 
int main(int argc, char* argv[])
{
    std::cout << "Hello, world !\n";
    return 0;
}

修改它,使之产生输出:

before main()
Hello, world !
after main()

但不要对main()做任何修改。

---------------------------------------------------------------------------

#include 

struct Foo
{
    Foo()  { printf("before main()\n"); }
    ~Foo() { printf("after main()\n"); }
};

Foo smallFoo;

int main(int argc, char* argv[])
{
    std::cout << "Hello, world !\n";
    return 0;
}

哈哈,就这么就搞定了。这利用了C++的一个特性——一个全局对象在“程序开始时”建立一次,在“程序终止时”销毁一次。(参见《C++程序设计语言(特别版)》10.4.3节 构造和析构)

注意,不要把Foo函数中的printf()换成cout,不然你会哭的!(不信你试试:p) 七猫说,这是因为在smallFoo析构前,中的类已经被析构了。有什么问题问七猫,偶不知道。^_^

相关文章:
jozu  《 》

--------------------------------------------------------------------

2004-11-14 补充:

今天我做了MWEP,测试了一下,发现在MingW的g++ 3.1.0下,编译这段代码:

#include  
using namespace std; 

struct Foo 
{ 
Foo() { cout << "before main" << endl;} 
~Foo() { cout << "after main" << endl;} 
}; 

Foo smallFoo; 

int main(int argc, char* argv[]) 
{ 
std::cout << "Hello, world !\n"; 
return 0; 
} 

结果和上个例子给出的一样,是正确的。莫非是VC6.0编译器实现的有问题?


--------------------next---------------------

阅读(482) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~