C_and_CPP 板


LINE

※ 引述《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
1F:推 QQ29:谢谢你 那我想藉此问一下 C-style强转和C++的static_cast 10/13 11:38
2F:→ QQ29:差别在哪里呀 因为我对static_cast的能力一直不是很清楚 10/13 11:39
3F:→ QQ29:C-style转型似乎是无敌写对type compile都不会error 10/13 11:40
4F:→ QQ29:static_cast好像就不是这样 爬文好像也没特别讨论...谢谢 10/13 11:40
5F:推 tyc5116:书上写,一个是强转,但是是用哪种方式转型不得而知 10/13 12:48
6F:→ tyc5116:static_cast则指明了是用静态转型~ 10/13 12:49
7F:推 QQ29:但是有什麽限制呢? 所谓静态是指什麽@@ 10/13 14:03
8F:→ QQ29:我会这样问是常看到的都是合理的转型用static_cast... 10/13 14:10
9F:→ QQ29:但不知道他和其他三种c++转型法 尤其是reinterpret cast差异 10/13 14:11
10F:推 tyc5116:static似乎不能作指标的转换,要用reinterpret的样子 10/13 15:17
11F:推 QQ29:假如我写float *f; int *p=static_cast<void*>(f); 10/13 15:27
12F:→ QQ29:compile就直接有error 这就是static_cast要达到的目的嘛? 10/13 15:27
13F:→ QQ29:如果要强转c++就必须要用reinterpret?? 10/13 15:27
14F:推 tyc5116:(以下是猜的),应该是,强转有时候在compile的时候会过,但是 10/13 15:32
15F:→ tyc5116:在执行的时候才显示出错误(忘了是啥错误讯息了,有过遇一次 10/13 15:33
16F:推 QQ29:我好像打错了改成int *p = static_cast<int*> ( f ); 10/13 15:37
17F:→ QQ29:这样不给过@@ 用void*可给过 实在不懂static_cast用意 10/13 15:38
18F:→ QQ29:只是希望compile时能够让避免无脑的c style转型让程式坏嘛? 10/13 15:38
19F:推 tyc5116:因为void*本身就定义成可转成所有型态的指标啊 10/13 15:51
20F:→ tyc5116:所以才会例外吧...当然还是我猜的啦....XD 10/13 15:52
21F:推 QQ29:嗯是~~只是我想知道static的能力跟他的用法 在哪边必须用他@@ 10/13 15:55
22F:推 littleshan:请看 Effective C++ 10/13 17:21







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP