Re: [問題] function pointer及一些語法問題
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: 今天幫同學debug
: 自己寫了些測試程式如下
: http://nopaste.info/8fabb7f59c.html
: 這段測試code主要有兩個問題
: GO((GG)(&A<int>::XD));
: 這行 (GG) 我是對他做轉型
: 1. 為啥他印出來不是印5 而是奇怪數字 不是應該有預設=5嘛
轉型後的function pointer type是
void (*) ()
這裡面沒有任何default argument
事實上C++ standard也不允許在function pointer type裡出現default argument
當此函式被呼叫時不會傳入任何參數
所以A::XD()在執行時的第一個參數是stack的殘骸
: 2. 如果不透過typedef 但我又想對他做轉型 我該怎麼寫 語法不太了解
(void (*) ())
: 3. 因為是看到別人的Code 有對傳入的function 做轉型的動作
: 請問這個是不是有什麼特殊用法或技巧???
: 於是乎我就改成以下這樣...
: http://nopaste.info/11076af302.html
: 我硬把他轉型多了一個int 可以傳
: 於是乎呼叫了XD 且傳入一個int
: compile沒有錯誤 請問道理何在... 反倒是少傳了int就會compile error
comiple time只管你的型別
你既然強制轉型成吃一個int的function 當然要傳一個int給它
以上面那個有default argument的XD來說
你也可以這樣惡搞:
((void (*) (int, int))&A<int>::XD)(100, 0);
印出來的結果就是100..
反正強制轉型就是不管你指標指的是什麼東西
一律換成轉型後的指標就對了
你高興的話也可以寫出下面這種code
class A () { int data; };
class B () { };
B* b = new B();
cout << ((A*)b)->data << endl;
當然這樣在run time會產生的問題 就是寫出這種不安全轉型的programmer的責任啦
: 以上
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.15.163
推
10/13 11:38, , 1F
10/13 11:38, 1F
→
10/13 11:39, , 2F
10/13 11:39, 2F
→
10/13 11:40, , 3F
10/13 11:40, 3F
→
10/13 11:40, , 4F
10/13 11:40, 4F
推
10/13 12:48, , 5F
10/13 12:48, 5F
→
10/13 12:49, , 6F
10/13 12:49, 6F
推
10/13 14:03, , 7F
10/13 14:03, 7F
→
10/13 14:10, , 8F
10/13 14:10, 8F
→
10/13 14:11, , 9F
10/13 14:11, 9F
推
10/13 15:17, , 10F
10/13 15:17, 10F
推
10/13 15:27, , 11F
10/13 15:27, 11F
→
10/13 15:27, , 12F
10/13 15:27, 12F
→
10/13 15:27, , 13F
10/13 15:27, 13F
推
10/13 15:32, , 14F
10/13 15:32, 14F
→
10/13 15:33, , 15F
10/13 15:33, 15F
推
10/13 15:37, , 16F
10/13 15:37, 16F
→
10/13 15:38, , 17F
10/13 15:38, 17F
→
10/13 15:38, , 18F
10/13 15:38, 18F
推
10/13 15:51, , 19F
10/13 15:51, 19F
→
10/13 15:52, , 20F
10/13 15:52, 20F
推
10/13 15:55, , 21F
10/13 15:55, 21F
推
10/13 17:21, , 22F
10/13 17:21, 22F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章