C_and_CPP 板


LINE

※ 引述《HwangTW (谷歌翻译王)》之铭言: : 开发平台(Platform): (Ex: Win10, Linux, ...) : Win10 : 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) : VC++ : 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) : iostream : 问题(Question): : if中==与=的差别 : 喂入的资料(Input): : { 4,4,5,5,6,6,6,7,7,7,8,8 } : 预期的正确结果(Expected Output): : 7 : 错误结果(Wrong Output): : 11 : 程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档) : 正确的:https://glot.io/snippets/fo6kxy21bw : 错误的:https://glot.io/snippets/fo75qt5ijj : 还请赐教,我还真的不知道为何会有这两种写法(汗 : 补充说明(Supplement): operator=() 以及 operator==() 主要的差别在於 overloading ( 重载) 的弹性. 前者只能以 non-static member function 的方式 存在; 後者作为 member 或 non-member 都可以. 这边稍微讲个题外话, 将 == 误写成 = 虽然好像是低级的错误; 但 在 mutation test 里却是一种判断 test 品质的手法: 藉由改变使 用的运算子, 来看程式码是否具有足够的错误分辨能力. 同样的概念也可以应用在开发上, 使用不同运算子会改变语意, 程 式行为会变得不一样; 但也有另外一种情形: 不改变运算子, 藉由 改变呼叫到的函式来更改程式行为, 这个方法在 C++ 里很常见, 我 们称它为 static polymorphism (静态多型). 如同下面的范例所示 std::cout << 1; // call operator<<(ostream&, int) std::cout << "2"; // call operator<<(ostream&, const char*) 虽然重载可以使程式码撰写变方便快速; 但从另一个角度来说: 载也引入了语意改变的可能性, 造成程式行为分歧, 增加理解成本. 所以说它是双刃剑也不为过. 再来回到你的程式码, 阵列元素用 int 会因为语言限制无法重载, 语意无分歧. 但如果我们今天导入一个自订型别 my_int 作为阵列 元素, 情况就不同了: struct my_int { my_int(int i) : i_(i) { } operator int&() { return i_; } int i_; }; my_int data[12]={4,4,5,5,6,6,6,7,7,7,8,8}; 网址: https://wandbox.org/permlink/db3WiVs3U23ZLQsW my_int 提供了一个 conversion constructor 以及 convsersion operator, 可以透过这两个成员函式在 int 和 my_int 之间互转, 甚至把 my_int 当作 int 物件般使用. 接着我们就可以随意重载 operator=(): struct my_int { // other codes here bool operator=(const my_int& rhs) { return i_ == rhs.i_; } // other codes here }; 网址: https://wandbox.org/permlink/RFVwVDIcEYD37N2J 上面的程式会印出 7 (这样应该算写对还是写错呢?). 不只测试, 在 C++ 里我们为现存程式码做扩充时通常也是依循这样 的模式: 透过为类别加上 extension method 来新增功能, 也许是 重载具名函式, 也许是重载运算子 (只差在重载的弹性还有难度), 导致我们需要先具备上面提到的背景知识才能回答你的问题: if中==与=的差别 差别取决於作用的运算元以及所有可能呼叫的重载版本, 如果运算 元型别全都是 primitive type 应该没什麽疑问才对. --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.216.75.43 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1591778038.A.F70.html ※ 编辑: loveme00835 (61.216.75.43 台湾), 06/10/2020 17:32:22
1F:推 lc85301: 出现了,是自动上色大大 06/11 00:54
2F:推 Dracarys: 大神把C++20 DIS读完了吗XD 06/11 01:23
3F:推 michael0728n: 酷~ 06/11 20:27
4F:推 HwangTW: 好可怕…脑袋在颤抖 06/12 14:35
5F:推 ofd168: 跪 06/13 12:48







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