c++ 允許在 char、int 和 double 資料型別前放置修飾符。修飾符用於改變基本型別的含義,所以它更能滿足各種情境的需求。
下面列出了資料型別修飾符:
signed,unsigned,long,short
修飾符 signed、unsigned、long 和 short 可應用於整型,
signed 和 unsigned 可應用於字元型,
long 可應用於雙精度型。
修飾符 signed 和 unsigned 也可以作為 long 或 short 修飾符的字首。例如:unsigned long int。
c++ 允許使用速記符號來宣告無符號短整數或無符號長整數。可以不寫 int,只寫單詞 unsigned、short 或 unsigned、long,int 是隱含的。例如,下面的兩個語句都宣告了無符號整型變數。
unsigned x;
unsigned
int y;
為了理解 c++ 解釋有符號整數和無符號整數修飾符之間的差別,我們來執行一下下面這個短程式:
例項
#include
using
namespace std;
/* * 這個程式演示了有符號整數和無符號整數之間的差別
*/int
main()
當上面的程式執行時,會輸出下列結果:
-
15536
50000
上述結果中,無符號短整數 50,000 的位模式被解釋為有符號短整數 -15,536。
型別限定符提供了變數的額外資訊。
限定符含義
const
const 型別的物件在程式執行期間不能被修改改變。
volatile
修飾符 volatile 告訴編譯器不需要優化volatile宣告的變數,讓程式可以直接從記憶體中讀取變數。對於一般的變數編譯器會對變數進行優化,將記憶體中的變數值放在暫存器中以加快讀寫效率。
restrict
由 restrict 修飾的指標是唯一一種訪問它所指向的物件的方式。只有 c99 增加了新的型別限定符 restrict。
c++提供了關鍵字explicit,可以阻止不應該允許的經過轉換建構函式進行的隱式轉換的發生。宣告為explicit的建構函式不能在隱式轉換中使用。
c++中, 乙個引數的建構函式(或者除了第乙個引數外其餘引數都有預設值的多參建構函式), 承擔了兩個角色。 1 是個構造器 ,2 是個預設且隱含的型別轉換操作符。
所以, 有時候在我們寫下如 aaa = ***, 這樣的**, 且恰好***的型別正好是aaa單引數構造器的引數型別, 這時候編譯器就自動呼叫這個構造器, 建立乙個aaa的物件。
這樣看起來好象很酷, 很方便。 但在某些情況下(見下面權威的例子), 卻違背了我們(程式設計師)的本意。這時候就要在這個構造器前面加上explicit修飾, 指定這個構造器只能被明確的呼叫/使用, 不能作為型別轉換操作符被隱含的使用。
explicit建構函式的作用
解析:explicit建構函式是用來防止隱式轉換的。請看下面的**:
class
test1
//普通建構函式
private
:int num;};
class
test2
//explicit(顯式)建構函式
private
:int num;};
intmain()
test1的建構函式帶乙個int型的引數,**23行會隱式轉換成呼叫test1的這個建構函式。而test2的建構函式被宣告為explicit(顯式),這表示不能通過隱式轉換來呼叫這個建構函式,因此**24行會出現編譯錯誤。
普通建構函式能夠被隱式呼叫。而explicit建構函式只能被顯式呼叫。
C 型別修飾符
資料隱藏是物件導向程式設計的乙個重要特點,它防止函式直接訪問類型別的內部成員。類成員的訪問限制是通過在類主體內部對各個區域標記public private protected來指定的。關鍵字 public private protected 稱為訪問說明符。乙個類可以有多個 public prote...
C 修飾符型別
c 允許在char int 和 double資料型別前放置修飾符。修飾符用於改變基本型別的含義,所以它更能滿足各種情境的需求。下面列出了資料型別修飾符 為了理解 c 解釋有符號整數和無符號整數修飾符之間的差別,我們來執行一下下面這個短程式 include using namespace std 這個...
C 修飾符型別
c 允許在char int 和 double資料型別前放置修飾符。修飾符用於改變基本型別的含義,所以它更能滿足各種情境的需求。下面列出了資料型別修飾符 修飾符signed unsigned long 和 short可應用於整型,signed和unsigned可應用於字元型,long可應用於雙精度型。...