吉林-小伙 0:51:57
算了 不瞎扯了
吉林-小伙 0:51:58
呵呵
吉林-小伙 0:52:11
我慢慢學吧
深圳-Enic<errorcpp@qq.com> 0:52:09
\Tencent\QQ\PersonalData\85126585\Image\]m~]nx{9u(8r@[5_(@_dtze.jpg)
這樣就異常了
深圳-Enic<errorcpp@qq.com> 0:52:17
偶來看看啥異常
吉林-小伙 0:52:29
內存不夠了
吉林-小伙 0:52:27
你這是new太多了
吉林-小伙 0:53:02
異常是 outofmemory
吉林-小伙 0:53:06
]9PGF.gif)
深圳-Enic<errorcpp@qq.com> 0:53:07
應該不是
深圳-Enic<errorcpp@qq.com> 0:54:21
被你說中了
深圳-Enic<errorcpp@qq.com> 0:54:27
bad allocation
吉林-小伙 0:54:39
呵呵
吉林-小伙 0:54:53
這樣看來
吉林-小伙 0:54:57
只要內存夠用
深圳-Enic<errorcpp@qq.com> 0:54:57

最近發現異常比返回值好用多了
深圳-Enic<errorcpp@qq.com> 0:55:10
mutex數量,這個問題我以后不應該糾結了
吉林-小伙 0:55:17
就能申請好多
深圳-Enic<errorcpp@qq.com> 0:55:24
說到底就是一條匯編指令
深圳-Enic<errorcpp@qq.com> 0:55:47
操作系統會緩沖下 id啥的
深圳-Enic<errorcpp@qq.com> 0:56:19
昨天一個多線程的代碼,用了三方線程庫,線程中不敢直接調用exitthread
吉林-小伙 0:56:35
怕內存泄露?
深圳-Enic<errorcpp@qq.com> 0:56:44
結果一個錯誤先直接退出線程,連續改了幾層函數
深圳-Enic<errorcpp@qq.com> 0:56:51
void改成bool
深圳-Enic<errorcpp@qq.com> 0:57:09
后來 直接throw 一下
深圳-Enic<errorcpp@qq.com> 0:57:19
線程主函數catch一下
深圳-Enic<errorcpp@qq.com> 0:57:28
nnd 多簡潔啊
吉林-小伙 0:57:38
異常處理影響效率啊
深圳-Enic<errorcpp@qq.com> 0:57:51
比每個函數后面跟一個assert 一個if舒服多了
吉林-小伙 0:58:04
呵呵
深圳-Enic<errorcpp@qq.com> 0:58:12
對了
吉林-小伙 0:58:09
泡泡魚告訴我
吉林-小伙 0:58:21
你用異常處理 那是你代碼寫的有問題
吉林-小伙 0:58:31
正常情況下不用try catch
深圳-Enic<errorcpp@qq.com> 0:58:36
異常處理不影響正常流程的效率吧
吉林-小伙 0:58:53
影響
深圳-Enic<errorcpp@qq.com> 0:58:55
那確實是有問題,發現一個不可恢復的錯誤
深圳-Enic<errorcpp@qq.com> 0:59:17
要么直接退出
深圳-Enic<errorcpp@qq.com> 0:59:23
要么泡異常
深圳-Enic<errorcpp@qq.com> 0:59:39
囧,,,
boost的正則
深圳-Enic<errorcpp@qq.com> 0:59:46
這么說來就是狗屎了
吉林-小伙 0:59:50
more effective c++ 里好像說了異常處理的效率問題了
深圳-Enic<errorcpp@qq.com> 0:59:56
到處異常,基本不靠返回值
深圳-Enic<errorcpp@qq.com> 1:00:02
我看看匯編代碼
吉林-小伙 1:00:07
嗯
吉林-小伙 1:00:15
想想異常處理的原理
深圳-Enic<errorcpp@qq.com> 1:00:24
我覺得沒啥
深圳-Enic<errorcpp@qq.com> 1:00:31
編譯器完全可以處理吧
吉林-小伙 1:01:12
你看看匯編代碼
吉林-小伙 1:02:27
經測試,在C++里面加個try以后性能下降了百多倍
深圳-Enic<errorcpp@qq.com> 1:02:33
多了幾個jmp
深圳-Enic<errorcpp@qq.com> 1:02:42
你測過了?
吉林-小伙 1:03:09
你用for 然后里邊寫個try catch
吉林-小伙 1:04:13
我覺得一定會低效的
吉林-小伙 1:05:20
因為為了捕捉到異常以后
吉林-小伙 1:05:24
仍然能堆棧平衡
深圳-Enic<errorcpp@qq.com> 1:05:28
try
{
00EC2390 mov byte ptr [ebp-4],1
int i = 0;
00EC2394 mov dword ptr [i],0
}
00EC239B jmp __catch$_wmain$0+14h (0EC23B1h)
catch(...)
{
int i = 0;
00EC239D mov dword ptr [i],0
}
00EC23A4 mov dword ptr [ebp-4],0
00EC23AB mov eax,offset __tryend$_wmain$1 (0EC23B8h)
00EC23B0 ret
00EC23B1 mov dword ptr [ebp-4],0
}
00EC23B8 jmp wmain+51h (0EC2381h)
00EC23BA jmp __catch$_wmain$4+38h (0EC24C3h)
吉林-小伙 1:05:30
正常結束程序
吉林-小伙 1:05:40
就必須要加入一些數據結構
深圳-Enic<errorcpp@qq.com> 1:05:42
是一個長jmp
深圳-Enic<errorcpp@qq.com> 1:05:50
編譯器干的
吉林-小伙 1:05:59
對啊
深圳-Enic<errorcpp@qq.com> 1:06:13
如果沒有異常,直接jmp到后面了
深圳-Enic<errorcpp@qq.com> 1:06:23
就多了這一條指令
吉林-小伙 1:06:33
你看的是表面
吉林-小伙 1:06:39
jmp之后呢?
吉林-小伙 1:06:54
正常 stdcall的函數 是在函數內部堆棧平衡的
深圳-Enic<errorcpp@qq.com> 1:07:01
之后是后面正常的代碼
吉林-小伙 1:07:02
這個你不否認吧
深圳-Enic<errorcpp@qq.com> 1:07:07
jmp沒有call吧
吉林-小伙 1:07:21
你先別看那個匯編
吉林-小伙 1:07:25
聽我說
吉林-小伙 1:07:26
呵呵
深圳-Enic<errorcpp@qq.com> 1:07:29
恩
吉林-小伙 1:07:37
正常我們調用一個函數
吉林-小伙 1:07:50
是stdcall 這個函數執行完畢的時候
吉林-小伙 1:08:02
要堆棧平衡一下 例如ret 8
吉林-小伙 1:08:33
這樣才能保證函數退出后依然能正確執行代碼
吉林-小伙 1:08:43
如果我們的函數中存在異常
吉林-小伙 1:08:58
就執行不到ret 8了
深圳-Enic<errorcpp@qq.com> 1:09:13
我說的是正常流程
吉林-小伙 1:09:23
哦
吉林-小伙 1:09:28
懂你的意思了
深圳-Enic<errorcpp@qq.com> 1:09:50
我用異常是難得一層一層加返回值判斷了
吉林-小伙 1:09:48
不管是什么流程
吉林-小伙 1:10:20
是不是要先弄個數據結構來保存下一些信息呢?
深圳-Enic<errorcpp@qq.com> 1:10:32
就是throw的
深圳-Enic<errorcpp@qq.com> 1:10:44
throw就是一個call了 好像
深圳-Enic<errorcpp@qq.com> 1:10:48
我去看看
吉林-小伙 1:10:50
嗯
深圳-Enic<errorcpp@qq.com> 1:12:11
throw(i);
002C237B mov eax,dword ptr [i]
002C237E mov dword ptr [ebp-148h],eax
002C2384 push offset __TI1H (2D8540h)
002C2389 lea ecx,[ebp-148h]
002C238F push ecx
002C2390 call @ILT+1225(__CxxThrowException@8) (2C14CEh)
深圳-Enic<errorcpp@qq.com> 1:12:15
就是了
吉林-小伙 1:12:24
嗯
深圳-Enic<errorcpp@qq.com> 1:13:02
囧,,,
深圳-Enic<errorcpp@qq.com> 1:13:07
匯編果然是好東西
深圳-Enic<errorcpp@qq.com> 1:13:55
看了評測
深圳-Enic<errorcpp@qq.com> 1:14:14
win上的異常要損失130倍
吉林-小伙 1:14:14
什么評測?
深圳-Enic<errorcpp@qq.com> 1:14:16
性能
深圳-Enic<errorcpp@qq.com> 1:14:24
異常發生
吉林-小伙 1:14:38
不發生呢?
深圳-Enic<errorcpp@qq.com> 1:14:46
1%
吉林-小伙 1:14:50
不發生就多點內存?
深圳-Enic<errorcpp@qq.com> 1:14:51
Linux是0
吉林-小伙 1:14:57
那就不錯了
深圳-Enic<errorcpp@qq.com> 1:15:00
aix比不用還要快一點
深圳-Enic<errorcpp@qq.com> 1:15:02
囧
深圳-Enic<errorcpp@qq.com> 1:15:37
應該是運行庫覺得的
深圳-Enic<errorcpp@qq.com> 1:15:44
這個玩深了
深圳-Enic<errorcpp@qq.com> 1:15:49
艸,搞不定了
吉林-小伙 1:16:05
我給你翻翻權威書籍吧
吉林-小伙 1:16:07
哈哈
吉林-小伙 1:16:45
擦 今天書翻不了了
吉林-小伙 1:16:49
讓隔壁的人拿走了
吉林-小伙 1:16:59
more effective c++
吉林-小伙 1:17:07
這里專門講了異常
深圳-Enic<errorcpp@qq.com> 1:17:09
http://blog.codingnow.com/2005/12/cpp_exception.html
深圳-Enic<errorcpp@qq.com> 1:17:35
我有印象那書
深圳-Enic<errorcpp@qq.com> 1:17:55
但是在匯編面前是沒有秘密的,,,囧,,,明天好好分析下
深圳-Enic<errorcpp@qq.com> 1:18:16
當時講師前半段一直在講 SEH ,和 C++ 關系不大。我本以為會講 C++ 異常的實現的,我個人以前研究過一些,很有興趣聽聽人家的理解,結果沒有聽到。據說后來那個會場最終吵了起來,很遺憾沒有領略那個盛況 :)
吉林-小伙 1:19:45
呵呵
深圳-Enic<errorcpp@qq.com> 1:21:01
程序中大量使用異常的,絕對不是為了提高程序的穩定性,或是可笑的提高可讀性,那都是忽悠外行的。使用異常原因只有一個:偷懶!
深圳-Enic<errorcpp@qq.com> 1:21:08
深表贊同,,,
深圳-Enic<errorcpp@qq.com> 1:21:14
想少些代碼
吉林-小伙 1:21:19
呵呵
吉林-小伙 1:21:29
泡泡魚是個高手啊
吉林-小伙 1:21:34
可惜啊
吉林-小伙 1:21:41
這小子總是丟一句就跑
吉林-小伙 1:22:48
按道理來講c++ happy path的時候 應該效率高的啊
吉林-小伙 1:22:56
畢竟不用返回值判斷了
深圳-Enic<errorcpp@qq.com> 1:23:10
看異常實現了
深圳-Enic<errorcpp@qq.com> 1:23:25
這個是運行期間的事件
吉林-小伙 1:23:30
嗯
深圳-Enic<errorcpp@qq.com> 1:23:43
throw一下要去找catch
深圳-Enic<errorcpp@qq.com> 1:23:47
估計時間就在這里
吉林-小伙 1:24:03
這個是 unhappy了
深圳-Enic<errorcpp@qq.com> 1:24:05
我剛剛的例子是給編譯器優化掉了
深圳-Enic<errorcpp@qq.com> 1:24:13
直接call了
吉林-小伙 1:24:13
unhappy path
吉林-小伙 1:24:15
哦 哦
深圳-Enic<errorcpp@qq.com> 1:24:21
這樣應該是0開銷
吉林-小伙 1:24:27
用g++吧
深圳-Enic<errorcpp@qq.com> 1:24:47
vs用的順手額
吉林-小伙 1:24:51
看看不優化是什么樣的
吉林-小伙 1:25:11
vs關閉優化功能
深圳-Enic<errorcpp@qq.com> 1:25:13
應該是和ssh那一套差不多
吉林-小伙 1:25:15
我心里還是不踏實呢
深圳-Enic<errorcpp@qq.com> 1:25:33
@ILT+1225(__CxxThrowException@8) (2C14CEh)
深圳-Enic<errorcpp@qq.com> 1:25:38
又看了下
深圳-Enic<errorcpp@qq.com> 1:25:42
call的是這個
吉林-小伙 1:26:02
傳了兩個參數
深圳-Enic<errorcpp@qq.com> 1:26:09
你拿od調看看
吉林-小伙 1:26:17
我沒OD了
吉林-小伙 1:26:19
公司電腦
深圳-Enic<errorcpp@qq.com> 1:26:27
搞驅動的,,,
深圳-Enic<errorcpp@qq.com> 1:26:32
沒OD?
吉林-小伙 1:26:43
沒有啊
吉林-小伙 1:26:53
我現在只會簡單的windbg
吉林-小伙 1:27:00
還是雙機調試
吉林-小伙 1:27:19
OD能調內核程序?
深圳-Enic<errorcpp@qq.com> 1:27:43
那你用wdbg看看,,,
深圳-Enic<errorcpp@qq.com> 1:27:51
囧,,,我這些太弱了
吉林-小伙 1:28:15
你弄弄
吉林-小伙 1:28:24
我研究虛擬攝像頭呢
吉林-小伙 1:28:28
我今天晚上要弄成功共
深圳-Enic<errorcpp@qq.com> 1:29:37
恩,祝你成功
我跟了一大段匯編
吉林-小伙 1:30:11
]9PGF.gif)
深圳-Enic<errorcpp@qq.com> 1:31:54
我決定以后還是不排斥異常
吉林-小伙 1:32:36
看你對代碼體積 還有效率有沒有什么特殊要求了
吉林-小伙 1:32:43
這東西 存在就合理
吉林-小伙 1:32:51
必有其用武之地啊
深圳-Enic<errorcpp@qq.com> 1:33:03
實在是少些太多代碼的,,,
吉林-小伙 1:33:20
呵呵
深圳-Enic<errorcpp@qq.com> 1:33:23
你不知道,今天我改第一個函數 最少改了5層
吉林-小伙 1:33:30
不用返回值 不用斷言和if
深圳-Enic<errorcpp@qq.com> 1:33:49
asio做的比較好
深圳-Enic<errorcpp@qq.com> 1:34:10
一個功能提供一個異常版和一個返回值版
深圳-Enic<errorcpp@qq.com> 1:35:00
http://www.cnblogs.com/napoleon_liu/archive/2010/10/27/1862240.html
深圳-Enic<errorcpp@qq.com> 1:35:12
這個是分析異常實現機制的
深圳-Enic<errorcpp@qq.com> 1:35:18
你可以明目了
吉林-小伙 1:35:35
不過記不太清了
吉林-小伙 1:35:32
以前看過
吉林-小伙 1:35:44
好像是和調用堆棧有關系
吉林-小伙 1:35:50
平衡堆棧那些
深圳-Enic<errorcpp@qq.com> 1:36:08
這些開銷不會超過一倍的
深圳-Enic<errorcpp@qq.com> 1:36:44
就算不是異常平衡,你自己寫返回值一樣還是一層一層平衡下去了
吉林-小伙 1:37:13
嗯 但是用異常不是需要新的數據結構嗎
吉林-小伙 1:37:17
這多了一些開銷
吉林-小伙 1:37:51
現在我的水平 還不是糾結是否應該用異常的時候
吉林-小伙 1:37:51
呵呵
吉林-小伙 1:38:02
知道個大概就行啦 慢慢來吧
深圳-Enic<errorcpp@qq.com> 1:38:45
囧,,,
都是被逼的,,,
深圳-Enic<errorcpp@qq.com> 1:39:07
經過今天的事情,我才知道為啥要拋異常
深圳-Enic<errorcpp@qq.com> 1:39:38
你看超大型項目,好幾百層的函數調用,,,
吉林-小伙 1:39:38
知道今天 你才知道拋出異常是call?
深圳-Enic<errorcpp@qq.com> 1:39:42
艸
深圳-Enic<errorcpp@qq.com> 1:39:48
那直接死了算了
吉林-小伙 1:40:32
你知道拋出異常的那個參數是干啥的不?
深圳-Enic<errorcpp@qq.com> 1:40:35

讓你在第999層的函數調用根據一個返回值退出程序
深圳-Enic<errorcpp@qq.com> 1:40:40
不知道
深圳-Enic<errorcpp@qq.com> 1:40:51
結果上面998層都是void
吉林-小伙 1:40:57
呵呵
深圳-Enic<errorcpp@qq.com> 1:41:00
4P4ECX6KO.gif)
吉林-小伙 1:41:04
你說的也有道理
吉林-小伙 1:41:15
這個就是架構師設計的不合理了
吉林-小伙 1:41:35
throw 那個參數 可以傳給catch那里
深圳-Enic<errorcpp@qq.com> 1:41:49
壓了兩個參數
深圳-Enic<errorcpp@qq.com> 1:41:53
還有一個是啥
吉林-小伙 1:42:02
你剛才寫的是1吧
吉林-小伙 1:42:17
你寫兩個
吉林-小伙 1:42:21
看看是不是壓了三個
深圳-Enic<errorcpp@qq.com> 1:43:28
4P4ECX6KO.gif)
你們家異常能一次throw倆參數
吉林-小伙 1:43:37
push offset __TI1H (2D8540h)
吉林-小伙 1:43:57
艸
吉林-小伙 1:44:11
從來沒用過兩個參數
吉林-小伙 1:44:14
不知道是否可以
吉林-小伙 1:44:25
壓入了一個首地址
吉林-小伙 1:44:32
TI1H的首地址
深圳-Enic<errorcpp@qq.com> 1:44:39
還有一個后來跟匯編的時候好像看了啥info
吉林-小伙 1:44:48
這個TI1H是什么東東呢
深圳-Enic<errorcpp@qq.com> 1:45:08
我也不知道,估計是index之類的
深圳-Enic<errorcpp@qq.com> 1:45:17
要去找catch的
吉林-小伙 1:45:23
嗯
深圳-Enic<errorcpp@qq.com> 1:45:50
\Tencent\QQ\PersonalData\85126585\Image\g$o420(`($o}2$~dp1ppzsa.jpg)
吉林-小伙 1:45:55
謝謝
吉林-小伙 1:46:04
今天對異常又有了新的理解啊
深圳-Enic<errorcpp@qq.com> 1:46:19
4P4ECX6KO.gif)
謝謝
吉林-小伙 1:46:24
這throw了一個對象
吉林-小伙 1:46:38
catch 那邊就用的對象了
深圳-Enic<errorcpp@qq.com> 1:46:48
我今天最大的收獲是在云風的博客,看到了異常的本質
深圳-Enic<errorcpp@qq.com> 1:46:51
偷懶,,,
深圳-Enic<errorcpp@qq.com> 1:47:04
和面向對象一樣,,,
深圳-Enic<errorcpp@qq.com> 1:47:11
整個泥馬就是想偷懶了
深圳-Enic<errorcpp@qq.com> 1:47:14
囧,,,
吉林-小伙 1:47:55
拋出異常這邊用引用也白費吧
吉林-小伙 1:48:07
catch用引用也沒用
吉林-小伙 1:48:12
還是copy了一份
深圳-Enic<errorcpp@qq.com> 1:48:31
這是看編譯器操作了
吉林-小伙 1:48:39
不用看
吉林-小伙 1:48:43
必須copy
吉林-小伙 1:49:14
throw 那個地方是臨時對象
深圳-Enic<errorcpp@qq.com> 1:49:16
那個程序實施看就知道了
深圳-Enic<errorcpp@qq.com> 1:49:27
不一定是臨時的
吉林-小伙 1:49:32
一定的
吉林-小伙 1:49:34
呵呵
吉林-小伙 1:49:33
你試試
吉林-小伙 1:49:41
這個地方我記得最清楚
深圳-Enic<errorcpp@qq.com> 1:49:53
囧,我要是一個 關閉拷貝構造的class
深圳-Enic<errorcpp@qq.com> 1:49:57
你咋整,,,
深圳-Enic<errorcpp@qq.com> 1:50:04
不讓拋了,,,
吉林-小伙 1:50:34
你試試
吉林-小伙 1:50:37
這個問題我真沒想過
吉林-小伙 1:51:01
不過你怎么關閉拷貝構造呢?
吉林-小伙 1:51:39
默認構造你可以關閉
深圳-Enic<errorcpp@qq.com> 1:51:56
囧,,,
深圳-Enic<errorcpp@qq.com> 1:52:01
如果你說的成立
深圳-Enic<errorcpp@qq.com> 1:52:13
就是說這樣違反了Cpp的語法規則
吉林-小伙 1:52:29
你打印下地址
吉林-小伙 1:52:34
看看 這個不是我說的
深圳-Enic<errorcpp@qq.com> 1:52:36
用 引用接收到一個 copy的對象
吉林-小伙 1:52:40
是我從書上看的
吉林-小伙 1:52:52
當然 不排除我記錯的可能
吉林-小伙 1:52:58
但是 我覺得我沒記錯
吉林-小伙 1:52:59
呵呵
吉林-小伙 1:53:19
你試試 我去寫攝像頭
吉林-小伙 1:53:27
等你結果
]9PGF.gif)
深圳-Enic<errorcpp@qq.com> 1:56:13
囧,,,
是臨時對象
吉林-小伙 1:56:24
]9PGF.gif)
深圳-Enic<errorcpp@qq.com> 1:56:25
所以,這里不是 call
吉林-小伙 1:56:36
引用失效了吧
深圳-Enic<errorcpp@qq.com> 1:56:39
應該有個運行時環境做了手腳
越南-relilun(232359027) 1:57:23
\Tencent\QQ\PersonalData\85126585\Image\g5q5hi9$_[%0v`]zcnytpob.jpg)
吉林-小伙 1:58:07
好了 既然已經確定是臨時對象了 你告訴我下怎么關閉拷貝構造
深圳-Enic<errorcpp@qq.com> 1:59:29
囧,,,
深圳-Enic<errorcpp@qq.com> 1:59:35
private
深圳-Enic<errorcpp@qq.com> 1:59:45
class CTest : boost::noncopyable
吉林-小伙 1:59:49

深圳-Enic<errorcpp@qq.com> 1:59:52
還有一個是宏的,,,
吉林-小伙 1:59:56
我二了
吉林-小伙 2:00:00
你試試
吉林-小伙 2:00:04
試試
吉林-小伙 2:00:03
你關閉下十四行
吉林-小伙 2:00:13
看看讓拋出不了
深圳-Enic<errorcpp@qq.com> 2:01:32
編譯錯誤
吉林-小伙 2:01:53
嗯
吉林-小伙 2:01:56
太感謝了
深圳-Enic<errorcpp@qq.com> 2:01:56
剛剛是建立在假象throw和catch是直接call的關系
吉林-小伙 2:02:03
又學到了不少
深圳-Enic<errorcpp@qq.com> 2:02:38
應該是有個第三方 接收throw的對象,然后清理現場,然后拷貝異常,再送到 catch
吉林-小伙 2:03:06
如果你throw的不是對象呢
吉林-小伙 2:03:22
僅僅是一個char*
深圳-Enic<errorcpp@qq.com> 2:03:25
4P4ECX6KO.gif)
我想這不是問題
吉林-小伙 2:04:09
應該是采用同樣的基址
深圳-Enic<errorcpp@qq.com> 2:04:09
今天的專題是:小伙和他的異常
吉林-小伙 2:04:11
機制
吉林-小伙 2:04:26

吉林-小伙 2:04:30
你可別發我
吉林-小伙 2:04:32
丟人
深圳-Enic<errorcpp@qq.com> 2:05:21
《一個異常引發的血案》
深圳-Enic<errorcpp@qq.com> 2:06:08
應該是mutex的數量到深入探討C++異常
深圳-Enic<errorcpp@qq.com> 2:09:34
忘了說了
catch不用reference
會多一次拷貝
吉林-小伙 (694129464) 2:10:20
哦?
、
那更有意思了
哈哈
了解了
吉林-小伙 (694129464) 2:11:17
這時候就copy了一下
然后第三方傳給 catch
深圳-Enic<errorcpp@qq.com> 2:12:37
三次析構
兩次構造
有一次應該是 0x語法中的move
吉林-小伙 (694129464) 2:13:07
沒用引用?
還是用了引用?
深圳-Enic<errorcpp@qq.com> 2:13:15
throw的時候
值catch
吉林-小伙 (694129464) 2:13:49
不應該三次析構 兩次構造的啊
深圳-Enic<errorcpp@qq.com> 2:14:17
C++果然是不是一般人玩的
我這是算了 try里邊的棧
c++太可怕了
深圳-Enic<errorcpp@qq.com> 2:15:50
MNFFL.gif)
話說java c#更可怕
你壓根就不想知道編譯器干了啥,,,
c++太可怕了
深圳-Enic<errorcpp@qq.com> 2:15:50
MNFFL.gif)
話說java c#更可怕
你壓根就不想知道編譯器干了啥,,,