kenwell
自己學習所用
導航
C++博客
首頁
新隨筆
聯系
聚合
管理
<
2025年6月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
統計
隨筆 - 25
文章 - 4
評論 - 21
引用 - 0
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
c++學習中的問題(10)
(rss)
shell(7)
(rss)
stl學習
(rss)
vim(1)
(rss)
算法(4)
(rss)
隨筆檔案
2010年8月 (5)
2010年6月 (6)
2008年10月 (3)
2008年7月 (2)
2008年6月 (2)
2008年5月 (2)
2007年10月 (1)
2006年11月 (1)
2006年3月 (3)
文章分類
c++學習心得(2)
(rss)
stl學習(1)
(rss)
文章檔案
2008年7月 (2)
2006年3月 (2)
c++的好站點
stl中文站
能下吧
電腦書籍下載
最優秀的STL使用學習網站
搜索
最新評論
1.?re: Linux Shell Bash 正則表達式介紹[未登錄]
評論內容較長,點擊標題查看
--Steven
2.?re: c++經典書籍推薦和下載
不錯 我才 來看不知道晚不晚了
--次奧校
3.?essays
In all seriousness, this is quite hilarious and, unfortunately, probably true.
--termpapers99@gmail.com
4.?re: 一個n!的數后面有多少個0
評論內容較長,點擊標題查看
--thesis service
5.?re: 一個n!的數后面有多少個0
評論內容較長,點擊標題查看
--buy cheap research paper
閱讀排行榜
1.?c++ string 和wstring 之間的互相轉換函數(29423)
2.?c++經典書籍推薦和下載(11471)
3.?Linux Shell Bash 正則表達式介紹(7786)
4.?c++ 中用IXMLHTTPRequest向服務器post Xml數據(4396)
5.?一個n!的數后面有多少個0(2972)
評論排行榜
1.?一個n!的數后面有多少個0(13)
2.?c++經典書籍推薦和下載(8)
3.?c++ string 和wstring 之間的互相轉換函數(2)
4.?Linux Shell Bash 正則表達式介紹(1)
5.?shell算術表達式操作方法匯總(0)
總結C++中的所有強制轉換函數(const_cast,reinterpret_cast,static_cast,dynamic_cast)
非常抱歉,謝謝郭老師的指正,我沒有認真看這個文章就轉過來了,其實他的錯誤太多了,而且還是致命的,對大家不負責任了,請大家諒解!現在是修正版本,基本沒有錯誤了!如果覺得還有問題,請聯系我,謝謝你的關注!
這篇文章其實并不是不才的原創,本來打算自己寫的,但是通過baidu一下,發現有兄弟寫出來了,就干脆摘錄下來,供大家參考使用了!
詳情請看:
view plain
print
?
標準
c
++中主要有四種強制轉換類型運算符:
const_cast
,
reinterpret_cast
,
static_cast
,
dynamic_cast
等等。
1)
static_cast
<T*>(a)
將地址a轉換成類型T,T和a必須是指針、引用、算術類型或枚舉類型。
表達式
static_cast
<T*>(a), a的值轉換為模板中指定的類型T。在運行時轉換過程中,不進行類型檢查來確保轉換的安全性。
例子:
class
B { ... };
class
D :
public
B { ... };
void
f(B* pb, D* pd)
{
D* pd2 =
static_cast
<D*>(pb);
// 不安全, pb可能只是B的指針
B* pb2 =
static_cast
<B*>(pd);
// 安全的
...
}
class
B { ... };
class
D :
public
B { ... };
void
f(B* pb, D* pd)
{
D* pd2 =
static_cast
<D*>(pb);
// 不安全, pb可能只是B的指針
B* pb2 =
static_cast
<B*>(pd);
// 安全的
...
}
class
B { ... };
class
D :
public
B { ... };
void
f(B* pb, D* pd)
{
D* pd2 =
static_cast
<D*>(pb);
// 不安全, pb可能只是B的指針
B* pb2 =
static_cast
<B*>(pd);
// 安全的
...
}
2)
dynamic_cast
<T*>(a)
完成類層次結構中的提升。T必須是一個指針、引用或無類型的指針。a必須是決定一個指針或引用的表達式。
表達式
dynamic_cast
<T*>(a) 將a值轉換為類型為T的對象指針。如果類型T不是a的某個基類型,該操作將返回一個空指針。
例子:
class
A { ... };
class
B { ... };
void
f()
{
A* pa =
new
A;
B* pb =
new
B;
void
* pv =
dynamic_cast
<A*>(pa);
// pv 現在指向了一個類型為A的對象
...
pv =
dynamic_cast
<B*>(pb);
// pv 現在指向了一個類型為B的對象
}
3)
const_cast
<T*>(a)
去掉類型中的常量,除了
const
或不穩定的變址數,T和a必須是相同的類型。
表達式
const_cast
<T*>(a)被用于從一個類中去除以下這些屬性:
const
,
volatile
, 和 __unaligned。
例子:
class
A { ... };
void
f()
{
const
A *pa =
new
A;
//const對象
A *pb;
//非const對象
//pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象
pb =
const_cast
<A*>(pa);
// 現在OK了
...
}
class
A { ... };
void
f()
{
const
A *pa =
new
A;
//const對象
A *pb;
//非const對象
//pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象
pb =
const_cast
<A*>(pa);
// 現在OK了
...
}
class
A { ... };
void
f()
{
const
A *pa =
new
A;
//const對象
A *pb;
//非const對象
//pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象
pb =
const_cast
<A*>(pa);
// 現在OK了
...
}
4)
reinterpret_cast
<T*>(a)
任何指針都可以轉換成其它類型的指針,T必須是一個指針、引用、算術類型、指向函數的指針或指向一個類成員的指針。
表達式
reinterpret_cast
<T*>(a)能夠用于諸如
char
* 到
int
*,或者One_class* 到 Unrelated_class*等類似這樣的轉換,因此可能是不安全的。
例子:
class
A { ... };
class
B { ... };
void
f()
{
A* pa =
new
A;
void
* pv =
reinterpret_cast
<A*>(pa);
// pv 現在指向了一個類型為B的對象,這可能是不安全的
...
}
標準c++中主要有四種強制轉換類型運算符: const_cast,reinterpret_cast,static_cast,dynamic_cast等等。 1)static_cast<T*>(a) 將地址a轉換成類型T,T和a必須是指針、引用、算術類型或枚舉類型。 表達式static_cast<T*>(a), a的值轉換為模板中指定的類型T。在運行時轉換過程中,不進行類型檢查來確保轉換的安全性。 例子: class B { ... }; class D : public B { ... }; void f(B* pb, D* pd) { D* pd2 = static_cast<D*>(pb); // 不安全, pb可能只是B的指針 B* pb2 = static_cast<B*>(pd); // 安全的 ... } class B { ... }; class D : public B { ... }; void f(B* pb, D* pd) { D* pd2 = static_cast<D*>(pb); // 不安全, pb可能只是B的指針 B* pb2 = static_cast<B*>(pd); // 安全的 ... } class B { ... }; class D : public B { ... }; void f(B* pb, D* pd) { D* pd2 = static_cast<D*>(pb); // 不安全, pb可能只是B的指針 B* pb2 = static_cast<B*>(pd); // 安全的 ... } 2)dynamic_cast<T*>(a) 完成類層次結構中的提升。T必須是一個指針、引用或無類型的指針。a必須是決定一個指針或引用的表達式。 表達式dynamic_cast<T*>(a) 將a值轉換為類型為T的對象指針。如果類型T不是a的某個基類型,該操作將返回一個空指針。 例子: class A { ... }; class B { ... }; void f() { A* pa = new A; B* pb = new B; void* pv = dynamic_cast<A*>(pa); // pv 現在指向了一個類型為A的對象 ... pv = dynamic_cast<B*>(pb); // pv 現在指向了一個類型為B的對象 } 3)const_cast<T*>(a) 去掉類型中的常量,除了const或不穩定的變址數,T和a必須是相同的類型。 表達式const_cast<T*>(a)被用于從一個類中去除以下這些屬性:const, volatile, 和 __unaligned。 例子: class A { ... }; void f() { const A *pa = new A;//const對象 A *pb;//非const對象 //pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象 pb = const_cast<A*>(pa); // 現在OK了 ... } class A { ... }; void f() { const A *pa = new A;//const對象 A *pb;//非const對象 //pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象 pb = const_cast<A*>(pa); // 現在OK了 ... } class A { ... }; void f() { const A *pa = new A;//const對象 A *pb;//非const對象 //pb = pa; // 這里將出錯,不能將const對象指針賦值給非const對象 pb = const_cast<A*>(pa); // 現在OK了 ... } 4)reinterpret_cast<T*>(a) 任何指針都可以轉換成其它類型的指針,T必須是一個指針、引用、算術類型、指向函數的指針或指向一個類成員的指針。 表達式reinterpret_cast<T*>(a)能夠用于諸如char* 到 int*,或者One_class* 到 Unrelated_class*等類似這樣的轉換,因此可能是不安全的。 例子: class A { ... }; class B { ... }; void f() { A* pa = new A; void* pv = reinterpret_cast<A*>(pa); // pv 現在指向了一個類型為B的對象,這可能是不安全的 ... }
如果不明白,可以給我留言!
posted on 2008-07-22 10:07
c++ 學習
閱讀(335)
評論(0)
編輯
收藏
引用
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © c++ 學習
一本一本久久aa综合精品
|
久久九九久精品国产免费直播
|
欧美伊人久久大香线蕉综合69
|
理论片午午伦夜理片久久
|
久久无码精品一区二区三区
|
久久丝袜精品中文字幕
|
老男人久久青草av高清
|
久久99热精品
|
香蕉久久夜色精品国产2020
|
思思久久99热只有频精品66
|
97精品伊人久久久大香线蕉
|
久久精品嫩草影院
|
精品国产99久久久久久麻豆
|
色综合久久综精品
|
久久无码中文字幕东京热
|
香港aa三级久久三级
|
亚洲成色WWW久久网站
|
精品久久久久久无码人妻热
|
久久精品国产2020
|
久久99精品久久久久久齐齐
|
久久国产欧美日韩精品
|
久久精品国产久精国产思思
|
久久久久亚洲精品男人的天堂
|
久久精品国产亚洲av日韩
|
久久亚洲国产成人影院
|
99久久人人爽亚洲精品美女
|
99久久成人国产精品免费
|
午夜精品久久久久久久无码
|
久久国产精品一区
|
国产精品久久久久…
|
久久天天躁狠狠躁夜夜躁2O2O
|
怡红院日本一道日本久久
|
久久久久久狠狠丁香
|
蜜臀av性久久久久蜜臀aⅴ麻豆
|
久久噜噜久久久精品66
|
亚洲国产精品久久久久久
|
99麻豆久久久国产精品免费
|
久久香综合精品久久伊人
|
久久久久久久久久久
|
伊人久久大香线蕉av不卡
|
国产成人无码精品久久久性色
|