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

闡述C++編譯器變量進行優化說明

編輯:C++入門知識

在大多數情況下,把變量緩存在寄存器中是一個非常有價值的優化方法,如果不用的話很可惜。C++編譯器提供了顯式禁用這種緩存優化的機會。如果你聲明變量是使用了volatile修飾符,編譯器就不會把這個變量緩存在寄存器裡——每次訪問都將去存取變量在內存中的實際位置。

防止了C++編譯器對所修飾的變量進行優化。主要應用於多線程編程。volatile 可以用於修飾原生類型也可用於自定義類型。volatile 雖與const的語義不同但用法類似。

  1. class Gadget  
  2. {  
  3. public:  
  4.  void Foo() volatile{};  
  5.  void Bar() const{};   
  6.  void Doo(){};  
  7. //private:  
  8.     char name_;  
  9.     int state_;  
  10. }; 

若定義一個對象為const:const Gadget  cGadget; 說明cGadget對象的成員變量的值不可更改。所以要求該對象只能調用接口中的const型的成員函數。即要求其可調用的接口不能修改其成員變量的值,該成員函數必須為const型。即:

  1. class Gadget  
  2. {  
  3. public:  
  4.  void Foo() volatile{};  
  5.  void Bar() const{};   
  6.  void Doo(){};  
  7. //private:  
  8.     char name_;  
  9.     int state_;  
  10. }; 

因為const型變量要求其可調用接口為const型,而對象之間賦值需要調用其賦值函數,C++編譯器的賦值函數並非是const型,因此重載成了必然。可是有個可笑的問題是,const型對象是要求不能更改成員變量的值,但賦值是為了改變其值。

所以賦值函數考貝構造函數)不能為變量賦值。只要不在賦值函數考貝構造函數)裡為變量賦值是可以編譯通過的。但這毫無意義,說這個只是為volatile,因為volatile於const操作是一樣的,只是volatile是可以更改成員變量值,所以這裡不成問題。

該運算符把expression轉換為type-id類型,但沒有運行時類型檢查來保證轉換的安全性。它主要有如下幾種用法:
①用於類層次結構中基類和子類之間指針或引用的轉換。進行上行轉換把子類的指針或引用轉換成基類表示)是安全的;進行下行轉換把基類指針或引用轉換成子類表示)時,由於沒有動態類型檢查,所以是不安全的。
②用於基本數據類型之間的轉換,如把int轉換成char,把int轉換成enum。這種轉換的安全性也要開發人員來保證。
③把空指針轉換成目標類型的空指針。

  • 深度剖析C++編譯器怎樣實現異常處理
  • 大概講述C++編譯模式說明介紹
  • 更好的設計面向對象的C++語言
  • 最大程度講述C++編譯語言種種特點
  • 淺析Windows Embedded CE下Native C++的

④把任何類型的表達式轉換成void類型。

注意:C++編譯器不能轉換掉expression的const、volitale、或者__unaligned屬性。

  1. 如何正確編寫C++項目開發編寫項目計劃書
  2. 對C++庫函數進行學習探索總結筆記
  3. 深度演示C++語言的種種高安全性
  4. 詳細介紹如何准確無誤的編寫C++語言
  5. 深度演示C++語言的種種高安全性

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