兩段想當然寫下的**,你看出問題了吧
1class
data;
2data
*finddata();
3void
getdata(data
*dataptr)47
data
*data
=null;
8getdata(data);
9data
->
somefunction();
第二段**,更得仔細點
1classa;2
classb;3
a const
*geta();4b
const
*getb();
5template
<
typename t
>
6int
getspecialvalue(t
*classptr)710
11template
<>
12int
getspecialvalue
<>(a*
classptr)
1316
template
<>
17int
getspecialvalue
<>(b*
classptr)
1821
a const
*classptr
=geta();
22int
ret=
getspecialvalue(classptr);
23cout
<<
ret<<
endl;
//out 3721! why not 37?
2425
26 第一段的問題在於看到指標想當然認為是位址,data 可以帶回反回值,其實因為這裡是值傳遞,實參data把自己的值賦給了dataptr,dataptr後來確實從finddata()得到了想要的值,但這對一點影響也沒有,所以函式返回時,data的值沒有發生變化,也就是沒有帶回想要的值。
只要不想當然,仔細一想就明白了,解決辦法很簡單:
1void
getdata(data
*&dataptr)24
第二段的問題是沒有注意到那個const, t* 和 t const* 是不一樣的,不能完全匹配,所以不會找到對a型別的特化版本,解決辦法可以這樣:
1template
<
typename t
>
2int
getspecialvalue(t
const
*classptr)36
7template
<>
8int
getspecialvalue
<>
(a const
*classptr)912
template
<>
13int
getspecialvalue
<>
(b const
*classptr)
14 能過這兩個小例子就可以知道,c++細節很多,要仔細,不能想當然。
是我想當然了
這是我第1個帖子關於rails的帖子。其實,聽到rails有好些日子了。2年了吧。不過,從沒有實踐。早兩天,想看看rails的activerecord,因為我想看看它的sql是如何產生的。原因是 如此orm?看源 我才發現原來我錯了。是我想當然了。我想當然,它能支援多資料庫。應該同hibernate...
測試小故事48 想當然
想當然是一種託詞,是不明事理的妄加揣測。我覺得,我認為,我以為。想當然,乙個團隊中總是或多或少的存在著一些想當然的因素,軟體專案也存在同樣的問題。專案過程中,總有人想當然的認為專案經理會對專案過程負責,也就有了偷懶和渾水摸魚的現像存在 專案管理者想當然的認為任為分配下去了,一切都會按計畫進行,所以萬...
《假設的世界 一切不能想當然》筆記
日 竹內薰 著 本書通過各類科學領域的事例,介紹了支配著我們頭腦的各種假設,並向各位傳授了不依照成見進行判斷的訣竅。其實啊 目前還沒人能解釋清楚 全世界都是假設!你心目中那些經過科學方法驗證的定論,其實都是假設。你腦子裡的各種常識,也不過是假設而已。本書的中心思想可以歸納以下三點 請注意,看這本書時...