西西河

主题:庆祝Python跃居世界第四程序语言 -- 空格

共:💬100 🌺284
全看分页树展 · 主题 跟帖
家园 你举的例子里之所以会产生混淆,与其说是因为

overload,还不如说是因为隐形的类型转换(Implicit conversion),即int被允许自由的转换成float。如果不允许int隐形转为float,你如果想调用void foo(float),只能写成foo(1.0)或者foo(static_cast<float>(1))。而如果code里写成foo(1),读你的code的人必然意思到还有一个函数void foo(int)存在。这个隐形的类型转换是C的几个最被人指责的缺点之一。C++中为了和C兼容而不得不支持。在具体的工程开发中,比如我所在的公司,禁止使用隐形的类型转换。

运算符overload最重要的应用是在generic programming。可以说如果不支持运算符overload,你不可能实现generic programming。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河