c 型別轉換詳解

2021-07-23 12:59:52 字數 2637 閱讀 9904

c++型別轉換分為隱式型別轉換和顯式型別轉換

又稱為「標準轉換」,包括以下幾種情況:

1,算術轉換(arithmetic conversion) : 在混合型別的算術表示式中, 最寬的資料型別成為目標轉換型別。

int ival = 3;

double dval = 3.14159;

ival + dval;//ival被提公升為double型別

2,一種型別表示式賦值給另一種型別的物件:目標型別是被賦值物件的型別
int

*pi = 0; //

0被轉化為int

*型別ival = dval; // double->int

例外:void指標賦值給其他指定型別指標時,不存在標準轉換,編譯出錯

3,將乙個表示式作為實參傳遞給函式呼叫,此時形參和實參型別不一致:目標轉換型別為形參的型別

extern

double

sqrt(double);

cout

<< "the square root of 2 is "

<< sqrt(2) << endl;

//2被提公升為double型別:2.0

4,從乙個函式返回乙個表示式,表示式型別與返回型別不一致:目標轉換型別為函式的返回型別
double difference(int ival1, int ival2)

被稱為強制轉換型別(cast

用於expression 和 new_type 之間的轉換,前提條件是new_type和expression之間已經有了混合的隱式轉換(combination of implicit) 或者有自定義的轉換型別(user-defined conversions)。

注意:sourse:test.cpp

#include 

#include

struct b {};

struct d : b {};

enum

class e ;

enum eu ;

int main()

output:

n = 3

v.size() = 10

after move, v.size() = 0

*ni = 3

注意:

std::cout

<< "n = "

<< n << '\n';

std::vector

v = static_cast

>(10);

上段**檢查時會報錯。因為沒有定義或者實現的由int-to-vector 的轉換。

通常用於繼承關係中的安全的向上(upcast)或者向下(downcast)轉換

newtype和expression 同為類指標,或者引用,安全轉換。

sourse.cpp

#include 

struct v ; // must be polymorphic to use runtime-checked dynamic_cast

};struct a : virtual v {};

struct b : virtual v

};struct d : a, b

};struct base

};struct derived: base

};int main()

base* b2 = new derived;

if(derived* d = dynamic_cast

(b2))

delete b1;

delete b2;

}

output:

downcast from b2 to d successful
reinpreter_cast可以把整數轉換為指標或者指標轉換為整數。以後研究。
#include 

#include

#include

int f()

int main()

output:

the value of &i is

0x7fff520e2a98

42this system is little-endian

42

該運算子物件用來修改型別的const或者volatile屬性。常量型別轉換為非常常量類。

sourse.cpp

#include 

struct type

void m1(int v) const

int i;

};int main()

output

i = 4

type::i =

4

熟練運用還需要在工程中掌握。

C 型別轉換詳解

目錄 c 對於內建型別有隱式或顯式的型別轉化,如int,double,long,char,但是,c 還有類這個概念,類是一種自定義型別,為了讓類 自定義型別 達到內建型別的層次,c 對類也挺提供一些方法進行自動或者強制型別轉換 c 的好多任務作,在我看來就是讓自定義型別能和內建型別一樣簡單使用 操作...

C 型別轉換詳解 const cast

一.函式描述 const cast type id expression 主要是用來去掉const屬性,當然也可以加上const屬性。主要是用前者,後者很少用。去掉const屬性 const case num 常用,因為不能把乙個const變數直接賦給乙個非const變數,必須要轉換。加上const...

C 型別轉換詳解 const cast

一.函式描述 const cast type id expression 主要是用來去掉const屬性,當然也可以加上const屬性。主要是用前者,後者很少用。去掉const屬性 const case num 常用,因為不能把乙個const變數直接賦給乙個非const變數,必須要轉換。加上const...