青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
OnTheWay2012
埋葬昨天的我,迎來重生的我!
C++博客
首頁
新文章
新隨筆
聚合
管理
posts - 15, comments - 89, trackbacks - 0
Why I am so stupid?
周五晚上的時候在看Boost的源碼的時候發現了shared_ptr有一個很好用的功能,該功能的代碼示例如下:
boost::shared_ptr
<
int
>
pInt(
new
int
(
0
));
if
(pInt)
.
.
.
從上述代碼中可以看出,shared_ptr能夠模擬內置指針的功能。我很好奇shared_ptr是如何實現的這個功能,然后就找到了shared_ptr的源代碼看了看,結果發現在VC9的編譯環境下,shared_ptr不是采用重載bool操作符來實現的,為什么不采用重載bool操作符來實現呢?用一下代碼說明:
//
如果采用重載bool操作符的形式來實現的話,會存在以下的一些問題,這些問題可以總結為“在不該使用的地方使用了隱含的類型轉換”
shared_ptr
<
int
>
pInt(
new
int
(
0
));
int
n
=
pInt;
//
如果采用重載布爾的方法,這句明顯應該是錯誤的語句就會編譯通過
那么,Boost采用的方法是什么方法呢?Boost所采用的方法的是:
typedef T
*
(this_type::
*
unspecified_bool_type)()
const
; //Ln 1
operator
unspecified_bool_type()
const
//
never throws Ln2
{
return
px
==
0
?
0
:
&
this_type::
get
; //Ln3
}
當第一次看到這三行代碼的時候,我被震驚了!
我看了半天都不知道這三行代碼到底是什么意思!周五晚上我用baidu,google搜了半天,終于發現Ln1不就是自己以前用過的指向成員函數的指針嗎?!我真蠢,看了半天還是沒看明白。那么一個問題解決了,另外一個更無法理解的問題出現了:為什么在寫下
if
(pInt)
Ln2和Ln3所定義的函數會被調用!!!我找呀找,還是不明白!我問google呀,還是不明白!我問baidu呀,還是不明白!
這個問題,折磨了我兩天,今天晚上的時候,有打開VC9,有一次看到這段代碼,突然就明白了。
在Ln1定義了一個類型(指向成員函數指針);
在Ln2和Ln3定義了一個函數,該函數是一個類型轉換函數,把shared_ptr,轉換為一個指向成員函數的指針。
舉一個簡單的類型轉換函數的例子:
class
A
{
public
:
operator
int
()
{
return
0
;
}
}
void
Test(
int
a)
{
cout
<<
a
<<
endl;
}
void
main()
{
A a;
Test(a);
//
這里調用的是類型轉換函數
}
至于為什么這種方法比重載bool好,是因為指向成員函數的指針很少能夠被編譯器用來做隱含的類型轉換。
現在終于明白了上面的代碼。雖然代碼里面的技術我都用過,但是當時為什么沒有像明白呢?!
我分析原因有兩條:
1. 最近好久沒有寫過代碼,生疏了。這是次要原因。
2.對C++缺乏了解。這是主要原因。
在解決這個問題的時候用google搜到了一個老外發的貼,大致內容如下:
每當我覺得對C++有所了解或者掌握它的秘密的時候,我總發現一些改變我看發的事情。
....
另外一個老外回答的時候用了一句話。I know the feelings.
現在,我終于也有第一個老外的感覺了。
posted on 2010-12-05 18:56
OnTheWay
閱讀(2340)
評論(4)
編輯
收藏
引用
所屬分類:
個人感悟
FeedBack:
#
re: Why I am so stupid?
2010-12-05 23:19 |
right
最近不知道怎么搞的,如果有人跟我研究這些C++的高級語法高級特性時,我總是有種想潑冷水的沖動。不過想想自己也是這么走過來的,也就逐漸釋然了。
回復
更多評論
#
re: Why I am so stupid?
2010-12-06 08:44 |
Sosi
Boost 乃一大寶藏。。。
回復
更多評論
#
re: Why I am so stupid?
2010-12-06 10:27 |
空明流轉
寫boost的人是挖空心思從Spec里面想摳出點東西拿來用。
那個令人發指的typeof更是連編譯器bug都用上了。
你要是挖空心思,其實也是可以的。。。
回復
更多評論
#
re: Why I am so stupid?
2010-12-13 17:53 |
crossgate
不覺得這個是C++的高級語法特性,覺得是比較常規的,實用的特性。
如果if判斷的時候,統一用 if (!pInt),會更合適。重載!操作符,會更容易,也更一般化一些。
回復
更多評論
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
對“隨筆”所寫的一篇文章《鏈表實驗》的一點看法
一種基于引用計數機制的智能指針實現
Why I am so stupid?
令人氣憤的現象
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
<
2010年12月
>
日
一
二
三
四
五
六
28
29
30
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
31
1
2
3
4
5
6
7
8
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(4)
給我留言
查看公開留言
查看私人留言
隨筆分類
C、C++(2)
操作系統(Windows、Linux、Unix)
讀書筆記
個人感悟(4)
面經 (4)
軟件設計(1)
數據庫
算法(3)
線程、進程
英語
雜項
轉載
隨筆檔案
2011年1月 (1)
2010年12月 (2)
2010年11月 (1)
2010年6月 (1)
2010年5月 (6)
2010年4月 (1)
2010年3月 (3)
友情連接
搜索
最新評論
1.?re: 對“隨筆”所寫的一篇文章《鏈表實驗》的一點看法
評論內容較長,點擊標題查看
--陳梓瀚(vczh)
2.?re: 對“隨筆”所寫的一篇文章《鏈表實驗》的一點看法
謝謝咯,呵呵。我喜歡這代碼風格,向你學習
--あ維wêiセ
3.?re: 一種基于引用計數機制的智能指針實現
把A *p = new A();這句換成A p;不行嗎?
--叫我老王吧
4.?re: 一種基于引用計數機制的智能指針實現
Boost 里面有,在C++ TR1 里面也已經有這種指針(就是來自Boost)
--Phuehvk
5.?re: 一種基于引用計數機制的智能指針實現[未登錄]
比較討厭這種引用計數指針的使用,一旦使用就意味這在所有的函數參數中必須使用指針引用或者值拷貝,一旦某些函數要求用裸指針,就可能引發問題。
--hdqqq
閱讀排行榜
1.?一道面試題(求一個unsigned int 數的二進制表示中有多少個1?)(6197)
2.?一種線程安全的單例模式實現方式(5781)
3.?一種基于引用計數機制的智能指針實現(2959)
4.?不要把類的外衣脫下來,讓類的美麗消失于無形(2808)
5.?幾道面試題,有的做出來了,有的不會做,請大家指教(2649)
評論排行榜
1.?一道面試題(求一個unsigned int 數的二進制表示中有多少個1?)(15)
2.?一種線程安全的單例模式實現方式(15)
3.?幾道面試題,有的做出來了,有的不會做,請大家指教(14)
4.?令人氣憤的現象(13)
5.?不要把類的外衣脫下來,讓類的美麗消失于無形(9)
Copyright ©2025 OnTheWay Powered By
博客園
模板提供:
滬江博客
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
国产一区二区0
|
久久资源在线
|
久久精品在线播放
|
欧美在线视频观看
|
久久国产欧美日韩精品
|
久久成人一区二区
|
美国十次成人
|
亚洲国产精品t66y
|
亚洲精品乱码久久久久久按摩观
|
亚洲激情综合
|
午夜精品久久久久影视
|
亚洲欧美色婷婷
|
久久国产精品免费一区
|
蜜桃久久av
|
国产精品第三页
|
在线视频成人
|
亚洲图片欧洲图片av
|
久久动漫亚洲
|
亚洲精品中文字幕在线
|
欧美综合二区
|
亚洲激情影院
|
香蕉成人啪国产精品视频综合网
|
老牛影视一区二区三区
|
国产精品久久久久毛片软件
|
国语自产精品视频在线看
|
亚洲精品专区
|
欧美一区日韩一区
|
欧美国产精品一区
|
亚洲自拍16p
|
欧美激情亚洲精品
|
国产一区二区丝袜高跟鞋图片
|
亚洲欧洲精品一区二区三区
|
亚洲欧美日韩电影
|
亚洲二区视频在线
|
性感少妇一区
|
久久久欧美精品sm网站
|
欧美精品在线观看播放
|
国产模特精品视频久久久久
|
亚洲日本免费
|
久久精品综合
|
亚洲香蕉在线观看
|
欧美日本簧片
|
亚洲精品麻豆
|
看欧美日韩国产
|
亚洲欧美日本视频在线观看
|
欧美日韩裸体免费视频
|
亚洲精品美女免费
|
欧美v日韩v国产v
|
久久av资源网站
|
国产精品日韩在线
|
亚洲一区国产视频
|
日韩性生活视频
|
欧美日韩在线一区二区
|
亚洲免费观看在线视频
|
亚洲第一综合天堂另类专
|
男女视频一区二区
|
亚洲清纯自拍
|
最新国产成人在线观看
|
女仆av观看一区
|
亚洲精品一区在线
|
亚洲日韩视频
|
欧美人与禽猛交乱配视频
|
亚洲裸体俱乐部裸体舞表演av
|
欧美激情一区二区三区在线视频观看
|
欧美福利电影在线观看
|
欧美一区二区三区四区在线观看
|
国产精品第一区
|
午夜精彩国产免费不卡不顿大片
|
亚洲网站在线看
|
国产欧美日韩综合一区在线观看
|
欧美一区二粉嫩精品国产一线天
|
亚洲一区激情
|
国模套图日韩精品一区二区
|
久久中文字幕一区
|
欧美成人激情视频
|
亚洲午夜一区
|
欧美一区二区播放
|
亚洲国产另类久久精品
|
亚洲久久成人
|
国产色产综合产在线视频
|
免费不卡在线视频
|
欧美美女操人视频
|
欧美一区二区在线免费播放
|
久久人人九九
|
亚洲免费中文字幕
|
久久先锋资源
|
亚洲视频你懂的
|
欧美有码在线观看视频
|
99热精品在线
|
欧美一区二区三区播放老司机
|
亚洲第一页自拍
|
在线一区免费观看
|
91久久午夜
|
亚洲第一页自拍
|
国产精品theporn88
|
久久婷婷蜜乳一本欲蜜臀
|
欧美极品一区二区三区
|
久久av红桃一区二区小说
|
欧美岛国在线观看
|
久久三级视频
|
国产精品久久久爽爽爽麻豆色哟哟
|
久久午夜影视
|
国产精品美女一区二区
|
欧美激情va永久在线播放
|
国产精品www.
|
亚洲第一综合天堂另类专
|
国产日产精品一区二区三区四区的观看方式
|
亚洲先锋成人
|
最新日韩中文字幕
|
午夜精品久久久久久久久久久久久
|
国产精品卡一卡二卡三
|
欧美大片网址
|
国内精品久久久久久影视8
|
99精品视频网
|
久久夜色精品国产噜噜av
|
亚洲欧美另类在线观看
|
欧美黄色片免费观看
|
久久人人爽人人
|
国产精品自拍小视频
|
99re66热这里只有精品4
|
亚洲人永久免费
|
久久蜜桃香蕉精品一区二区三区
|
亚洲一区二区三区四区五区黄
|
欧美成人精品福利
|
美女999久久久精品视频
|
国产亚洲激情
|
性做久久久久久免费观看欧美
|
一区二区三区.www
|
欧美激情一区在线
|
亚洲黄色小视频
|
亚洲国产成人久久综合
|
久久国产视频网
|
久久综合久色欧美综合狠狠
|
国产欧美另类
|
欧美一区二区三区四区在线观看地址
|
在线看视频不卡
|
亚洲欧美另类综合偷拍
|
在线视频欧美日韩精品
|
欧美日韩mp4
|
亚洲美女色禁图
|
一本色道久久综合狠狠躁篇怎么玩
|
亚洲欧美成人在线
|
亚洲欧美精品suv
|
国产人久久人人人人爽
|
亚洲欧美日本国产有色
|
久久久av毛片精品
|
狠狠色综合一区二区
|
久久久噜噜噜久久狠狠50岁
|
欧美不卡视频
|
夜夜嗨av一区二区三区四季av
|
久久久久九九九
|
欧美成人一区二区三区
|
日韩视频在线免费观看
|
欧美日韩午夜精品
|
亚洲一区二区三区四区中文
|
久久精品人人做人人爽
|
亚洲高清不卡在线
|
欧美日韩成人综合在线一区二区
|
日韩一级大片
|
久久久久久久久久久久久女国产乱
|
国内综合精品午夜久久资源
|
欧美国产视频一区二区
|
一区二区三区成人
|
久久久久久久久久久一区
|
99国内精品久久
|
欧美一区二区在线看
|
国一区二区在线观看
|
欧美国产1区2区
|
亚洲欧美美女
|
亚洲黄色免费
|
久久大香伊蕉在人线观看热2
|
在线观看一区
|
欧美性大战久久久久久久蜜臀
|
久久精品99国产精品
|
99精品99
|
欧美激情视频一区二区三区免费
|
亚洲无人区一区
|
在线观看视频免费一区二区三区
|
久久久无码精品亚洲日韩按摩
|
亚洲黄色成人网
|
久久综合久久综合久久
|
午夜久久福利
|
日韩一级片网址
|
极品尤物久久久av免费看
|
欧美视频一区
|
欧美成人国产
|
久久久av毛片精品
|
国产精品99久久久久久久vr
|
欧美大成色www永久网站婷
|
欧美有码视频
|
av不卡在线看
|
亚洲欧洲精品一区二区精品久久久
|
国产欧美日韩视频在线观看
|
欧美日韩一区二区三区
|
日韩午夜中文字幕
|
国产视频久久久久久久
|
欧美成人在线免费观看
|
欧美亚洲综合在线
|
亚洲一区自拍
|
亚洲视频高清
|