Programming 板


LINE

※ 引述《[email protected] (延宕的人生)》之铭言: : pow(2,3); 不接受,因为都是整数,没有pow(int, int),可以理解 : pow((float)2,3.0); 不接受,因为没有pow(float, double)的定义 : pow(2,3.0) 但是这个却接受,不过并没有pow(int, double)的定义啊? Function overload 的时候,c++ compiler 透过称作 overload resolution 的机制 挑选出 best viable function。作法是比较所有 overloaded functions 的每一个 参数转换的 rank,细节有点复杂,简单来说经过越简单的转换 rank 越好。 对 standard conversion 的部份而言,rank 是 exact match > promotion > conversion 现在的 pow 有六个 overloaded functions: pow(double, double) pow(double, int) pow(float, float) pow(float, int) pow(long double, long double) pow(long double, int) 以下分别分析三种情况的转换。 ====== pow(int, int) ====== 以第一种情况来看,对这六个 function 的参数一的转换都是 floating-integral conversion (意指从浮点数转换成整数,或是从整数转换成浮点数) 因此 rank 相同。 但是看参数二的转换,第一、三、五个是 floating-integral conversion,但是 第二、四、六个都是 identity conversion (意即不用转换),後者 rank 较高。 最後剩下三个选择: pow(double, int) pow(float, int) pow(long double, int) 由於这三者的每个参数转换 rank 都一样,因此无法比较优劣,compiler 会吐出 一个"ambiguous" (模棱两可的) 的错误讯息,因为它不知道该选谁。 ====== pow(float, double) ====== 同样六个 function,对 pow(float, double) 的第一个参数转换分别为 floating point promotion (专指 float 转 double) floating point promotion identity identity floating point conversion (浮点数之间的转换) floating point conversion 因此 3、4 > 1、2 > 5、6 第二个参数则分别为 identity floating-integral conversion floating point conversion floating-integral conversion floating point conversion floating-integral conversion 因此 1 > 3、4、5、6 根据 ISO Standard,这样子还是 ambiguous,选不出最好的一个。 就拿 pow(float, float) 和 pow(double, double) 来说好了,前者的参数一 rank 比 後者高,但後者的参数二 rank 比前者高,这样就是 ambiguous,无法比较谁比较好。 ====== pow(int, double) ====== 针对第三种情况,六者的参数一转换都是 floating-integral conversion, 参数二转换则分别是: exact match floating-integral conversion floating point conversion floating-integral conversion floating point conversion floating-integral conversion 因此 1 > 3、4、5、6,compiler 很高兴的宣布 best viable function 就是 pow(double, double),於是编译过了。 我知道看起来有点难懂,因为细节还满罗唆的,但我又不想写太长... -- Licensed under CC2.5(TW) by-sa, Samael Wang. http://creativecommons.org/licenses/by-sa/2.5/tw/ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.82.153 ※ 编辑: freesamael 来自: 220.135.82.153 (11/11 03:20)
1F:推 ledia:你写得很清楚呀 140.112.30.56 11/11 03:28
2F:推 gpmm:推推!好文! 61.57.130.248 11/11 08:07
3F:推 sunneo:GJ 讲的很细了220.132.228.138 11/12 00:26
4F:→ freesamael:S大夸奖我耶~ 这样我会骄傲 >/////< 220.135.82.153 11/12 00:36
5F:推 chchwy:推! 203.68.15.109 11/13 01: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灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP