分类:
2008-10-13 16:14:36
给出程序:
#includeint main(int argc, char* argv[]) { std::cout << "Hello, world !\n"; return 0; }
修改它,使之产生输出:
before main() Hello, world ! after main()
但不要对main()做任何修改。
---------------------------------------------------------------------------
#includestruct 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下,编译这段代码:
#includeusing 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编译器实现的有问题?