妙用VC++ 6.0编译器说明

VC++ 6.0编译作为一个高效的.NET程序语言。其混合了函数语言和物件导向程序编制语言,并且***的适用于编程、算法、技术和探索性开发,因此可以在使用的过程当中感受到趣味性和吸引力。
 
和VS 6.0这个产品的成熟相比,VC++ 6.0的编译器的的确确相对来说有些糟糕,其中最被诟病的是对模板技术支持很不好。下面我想做的一件事情,就是向那些继续留恋VC++ 6.0的朋友,介绍一些小花招,来避开VC++ 6.0的一些编译器缺陷。

按照C++标准,这里定义的变量var出了for循环应该被销毁。也就是说下面这段代码是有效的:

 
 
 
  1. for (int i = 0; i < 100; ++i)  
  2.        func();  
  3.    for (int i = 0; i < 100; ++i)  
  4.        func2(); 

而下面这段代码应该编译不过:

 
 
 
  1. for (int i = 0; i < 100; ++i)  
  2.   {  
  3.        if (has_found_it())  
  4.        {  
  5.            handle_find_result();  
  6.            break;  
  7.         }  
  8.   }  
  9.   if (i == 100)  
  10.        do_not_found(); 

然而VC++ 6.0对于***段代码会报变量i重复定义错误,而第二段代码编译通过。为了让VC++ 6.0的for语句看起来符合C++标准,你可以这样做:

 
 
 
  1. if (cond)  
  2.     if (1)  
  3.         for (int i = 0; i < 100; ++i)  
  4.             func1();  
  5.     else  
  6.         func2(); 

你会发现很有趣,这样define一下后,VC++ 6.0编译的for语句完全符合C++标准了!而且由于编译器的优化,Release版本不会增加任何额外的开销。喜欢“钻牛角尖”的朋友可能会说:嗯,不错的主意。但是——为什么不这样做:

 
 
 
  1. template <class T1, class T2> 
  2. T1 func(T2 arg)  
  3. {  
  4.     T1 var;  
  5.     ... // 处理var过程  
  6.     return var;  
  7. }  
  8.  
  9. void test()  
  10. {  
  11.     int result1 = func<int>(1);  
  12.     double result2 = func<double>(2);  
  13. }; 

很抱歉,这种用法VC++ 6.0不支持。让人恼火的是,VC++ 6.0编译时不会提示错误,但是生成的执行代码却很成问题。

【编辑推荐】

  1. C与C++中标准输入实现方式上的一点区别
  2. C++编译器如何对Const常量进行分配存储空间
  3. C++类库设计的基本构思与方法
  4. 玩转C++语言的几种方法
  5. 如何更好的进行C++代码编制
THE END