C 作用域 與 四種強制型別轉換

2021-07-24 18:18:59 字數 2174 閱讀 1828

c++四種強制型別轉換:const_cast,static_cast,dynamic_cast,reinterpret_cast。

const_cast

用來去除資料型別中的const屬性。在《c++語言程式設計(第四版)》中有提到:const_cast只用於將常量指標轉換為普通指標,將常引用轉換為普通引用,而不用來將常物件轉換為普通物件,因為這是沒有意義的。

用法:const_cast(expression)

static_cast

靜態型別轉換。它一般來說是安全和確定的。不過比如在void指標使用static_cast時如果使用不當也會有不安全的情況發生,所以一定要將其轉換為最初的型別。

1. 父類和子類之間轉換:其中子類(派生類)指標轉換成父類(基類)指標(上行轉換)是安全的,但父類指標轉換成子類指標(下行轉換)是不安全的(由於沒有動態型別檢查)。

2. 基本資料型別轉換。enum, struct, int, char, float等。這種轉換的安全性也要開發人員來保證。

eg: int i=2;

float x=atatic_cast(i);

3. 把空指標轉換成目標型別的空指標。

4. 把任何型別的表示式轉換成void型別。eg:  void *p = static_castvoid *>(pn);

5. static_cast不能轉換掉expression的const、volitale、或者__unaligned屬性。

用法:static_cast < type-id > ( expression )

dynamic_cast

主要用於類層次間的上行轉換和下行轉換(並且基類一定要有虛函式),還可以用於類之間的交叉轉換。

而且它是執行時而不是編譯時處理的,而執行時要進行型別檢查,所以

進行下行轉換時,它比static_cast更安全。

用法:dynamic_cast (

expression )

該運算子把expression轉換成type-id型別的物件。type-id 必須是類的

指標 、類的引用或者

void

*;(參見百科)

reinterpret_cast 

其所做的轉換一般只用於幫助實現一些非常底層的操作,有很大的危險性和不確定性。

用法:reinterpret_cast(expression)

type-id 必須是乙個指標、引用、算術型別、函式指標或者成員指標。它可以把乙個指標轉換成乙個整數,也可以把乙個整數轉換成乙個指標(先把乙個指標轉換成乙個整數,再把該整數轉換成原型別的指標,還可以得到原先的指標值)。

引用下前輩講的:

關於作用域,有專案的作用域(多檔案),檔案作用域,函式作用域,塊作用域({}()內的作用域)。

全域性變數:分為靜態和外部形式。預設為靜態,作用域為當前檔案,當申明為外部時,作用域為整個專案,在其他檔案中可以訪問該變數。(靜態變數只會建立一次,並且生存期是整個程式執行期間,因此上次的值會儲存下來,但是動態變數則會被釋放,重新分配,值無法儲存)

區域性變數:區域性變數出現在乙個作用域內,它們是侷限於乙個函式的。靜態區域性變數只對定義自己的函式體始終可見。(c++primer plus中提到,在全域性作用域宣告的const變數是定義該物件檔案的區域性變數,除非制定const變更為extern,否則不能被其他檔案訪問。)

auto:宣告變數為自動變數,但通常可以省略。c++11中,auto可以用於自動型別推斷。

extern:

宣告全域性變數。extern告訴編譯器存在著乙個變數和函式,即使編譯器在當前的檔案中沒有看到它。這個變數或函式可能在乙個檔案或者在當前檔案的後面定義。

static:

面向過程:在全域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態全域性變數。在區域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態區域性變數。在函式的返回型別前加上static關鍵字,函式即被定義為靜態函式。靜態函式與普通函式不同,它只能在宣告它的檔案當中可見,不能被其它檔案使用。

物件導向:在類內資料成員的宣告前加上關鍵字static,該資料成員就是類內的靜態資料成員。

(同全域性變數相比,使用靜態資料成員有兩個優勢:靜態資料成員沒有進入程式的全域性名字空間,因此不存在與程式中其它全域性名字衝突的可能性;

可以實現資訊隱藏。靜態資料成員可以是private成員,而全域性變數不能。)可以建立乙個靜態成員函式 。

const:使被修飾物件變成常量,無法更改。

C 四種強制型別轉換

c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...

C 四種強制型別轉換

1 概述 去const屬性用const cast。基本型別轉換用static cast。多型類之間的型別轉換用daynamic cast。不同型別的指標型別轉換用reinterpreter cast。2 詳解加示例 a const cast 用法 const cast 型別 表示式 用途 刪除con...

C 四種強制型別轉換

c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...