程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 解析C++老手也會出現的問題

解析C++老手也會出現的問題

編輯:C++入門知識

對於剛剛接觸到C++的用戶來說,C++確實擁有比別的開發語言更復雜的問題, 學習C++時應該注意由易至難,循序漸進,要成為C++老手,不是那麼容易的,必須要花很大的努力。

如:const int a;和int const b;中,雖然兩種具有相同的意義,但是最好利用後面的那種情況,後面的更加可讀,因為:int const我們可以很清楚地看到const是修飾int,而前面的那種方法中,我們就不那麼輕易知道到底const 的具體涵義。由後面的那種方法我們可以知道const指一個恆定的整形。Int *const b,指的是一個恆定的指針b,這個指針指向一個整型。

所以這個指針的內容可以改變,但是它的指針值也就是b的值不能變,相應的int const *b,指的是一個指向恆定整型內容的指針b,也就是說這個b的內容可以變,但是開始的b所指向的地址中的內容不能在程序當中通過b來改變。volatile對上面的原則也適用,使用類型T做為類型變量已經作為了模板參數的慣例,用來表示函數或者類所接受的類型參量可以用所有的類型。

  • 如何調用C++函數?
  • 透析C++的C++數組類型
  • 如何掌握C++指針基礎
  • 對C++鏈表進行解讀分析
  • 對C++迭代器工作原理說明介紹

在C++的模板的類型參量前,最好盡量使用typename來代替class。在編譯時期,模板被編譯兩次;實例化之前:檢查模板代碼本身,查看語法是否正確;在實例化期間,檢查模板代碼,查看是否所有的調用都有效。

當使用函數模板,並且引發模板實例化的時候,編譯器需要查看模板定義。在函數實參的類型的推導中,如果類型出現不匹配現象則會出現編譯錯誤。如果要解決這編譯錯誤則有以下幾種方法解決:對傳入的實參進行類型轉換成匹配類型後傳入。顯示指定模板函數的全特化不能為偏特化,因為函數不支持偏特化)類型。

例子如下所示:

  1. template < typename T >   
  2. T  & max(T  & value1,T  & value2)  
  3. {   
  4.    return  value1 > value2 ? value1:value2;  
  5. }   
  6.    
  7. 調用max( 3 , 4.1 )會出現編譯錯誤,解決的辦法:  
  8.  1 .max(static_cast < double > ( 3 ), 4.1 );  
  9.  2 .max < double > ( 3 );  
  10.  3 .將函數的模板參數從一個改為兩個。 

在模板函數內部不能指定默認的模板參數。函數不能采用偏特化的方法來實現類型的遞歸,但是它可以利用函數重載的方法來實現類型的轉換。相對於8而言類能使用偏特化的方法來實現類型的遞歸。

並且它的仿函數也可以使用重載operator()來實現函數重載方法。但是它的一個問題就是在調用仿函數的時候一定要加上它的實例化參數類型,以及調用它的構造函數。函數調用的時候可以采用由參數的類型來反推函數的模板參數,這是仿函數所不能的。所以我們在編程的過程當中一定要注意這些不同技術之間的優點和不足,看看哪些更適合我們。

在調用非標准函數的時候最好要與調用標准函數區分開來,這樣不致於使用程序產生歧義的錯誤。做法是:在變量或者函數的前面加上全局標識符。

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