(8)C 修飾符型別

2021-10-07 12:40:33 字數 2004 閱讀 8346

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可應用於雙精度型。...