1. 程式人生 > >隱式轉換與顯示轉換的區別概念理解

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

   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 https://blog.csdn.net/juebanrui1988/article/details/54728379

dynamic_cast https://blog.csdn.net/diaolingle/article/details/51195573

參考

https://blog.csdn.net/kezunhai/article/details/38417087

---------------------
作者:QT_人生
來源:CSDN
原文:https://blog.csdn.net/qq_36038987/article/details/77029044?utm_source=copy
版權宣告:本文為博主原創文章,轉載請附上博文連結!