程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 妙用VC++ 6.0編譯器說明

妙用VC++ 6.0編譯器說明

編輯:C++入門知識

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++代碼編制

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved