隱式轉換與顯示轉換的區別概念理解

2021-08-29 02:20:34 字數 1473 閱讀 7178

c++中的explicit關鍵字只能用於修飾只有乙個引數的類建構函式, 它的作用是表明該建構函式是顯示的, 而非隱式的, 跟它相對應的另乙個關鍵字是implicit, 意思是隱藏的,類建構函式預設情況下即宣告為implicit(隱式)。

隱式轉換:說白了就是在轉換時不給系統提示具體的顯示模型,讓其自動轉換,但是要記住一條編譯器一般只支援自下而上的型別轉換,例如int 轉 float

int a =4; float b= 5.56;

b =a; //這個就是隱式轉換,預設的把int a 型別的 轉換為float的型別.

顯示轉換:就是我們在c語言課程中學的,強制轉換,是我們可以直接對其賦值的。

int a =4; float b= 5.56;

float c =(float)a;//把int型別的a,強制轉換為float型別的。

記住:1,在工程專案中一定要記住,自己的對資料、型別的處理要能知道它的來龍去脈。不然可嫩南瓜會發生意想不到的後果!

二、 c++的四種強制轉型形式:

c++ 同時提供了四種新的強制轉型形式(通常稱為新風格的或 c++ 風格的強制轉型):

const_cast(expression)  // 解除const 限制

dynamic_cast(expression)

reinterpret_cast(expression)

static_cast(expression)

每一種適用於特定的目的:

·dynamic_cast 主要用於執行「安全的向下轉型(safe downcasting)」,也就是說,要確定乙個物件是否是乙個繼承體系中的乙個特定型別。它是唯一不能用舊風格語法執行的強制轉型,也是唯一可能有重大執行時代價的強制轉型。

·static_cast 可以被用於強制隱型轉換(例如,non-const 物件轉型為 const 物件,int 轉型為 double,等等),它還可以用於很多這樣的轉換的反向轉換(例如,void* 指標轉型為有型別指標,基類指標轉型為派生類指標),但是它不能將乙個 const 物件轉型為 non-const 物件(只有 const_cast 能做到),它最接近於c-style的轉換。

·const_cast 一般用於強制消除物件的常量性。它是唯一能做到這一點的 c++ 風格的強制轉型。

·reinterpret_cast 是特意用於底層的強制轉型,導致實現依賴(implementation-dependent)(就是說,不可移植)的結果,例如,將乙個指標轉型為乙個整數。這樣的強制轉型在底層**以外應該極為罕見。

舊風格的強制轉型依然合法,但是新的形式更可取。首先,在**中它們更容易識別(無論是人還是像 grep 這樣的工具都是如此),這樣就簡化了在**中尋找型別系統被破壞的地方的過程。第二,更精確地指定每乙個強制轉型的目的,使得編譯器診斷使用錯誤成為可能。例如,如果你試圖使用乙個 const_cast 以外的新風格強制轉型來消除常量性,你的**將無法編譯。

const_cast

dynamic_cast 參考

隱式轉換與顯示轉換的區別概念理解

隱式轉換就是不帶轉換型別的轉換 隱式轉換 說白了就是在轉換時不給系統提示具體的顯示模型,讓其自動轉換,但是要記住一條編譯器一般只支援自下而上的型別轉換,例如int 轉 float int a 4 float b 5.56 b a 這個就是隱式轉換,預設的把int a 型別的 轉換為float的型別....

c 隱式轉換顯示轉換

1 隱式轉換 一般是低型別向高型別轉化,能夠保證值不發生變化。隱式數值轉換 從 sbyte 到 short int long float double 或 decimal。從 byte 到 short ushort int uint long ulong float double 或 decimal...

隱式轉換和顯示轉換

0前言1 c 的型別轉換分為兩種,一種為隱式轉換,另一種為顯式轉換。2 c 中應該盡量不要使用轉換,盡量使用顯式轉換來代替隱式轉換。1 隱式轉換 定義 隱式轉換是系統跟據程式的需要而自動轉換的。1 c 型別 char,int,float,long,double等 的隱式轉換 算術表示式隱式轉換順序為...