美文网首页
操作符重载和隐式转换的思考

操作符重载和隐式转换的思考

作者: 码农苍耳 | 来源:发表于2017-10-07 21:26 被阅读6次

从刚开始工作的时候,就有很多人批判C++的操作符重载和隐式转换,我也是一直坚持显式调用的,但是最近看了一些C++相关的库后,发现其实这两者并没有那么的恐怖,反而在某些方面是一颗近乎完美的银弹!

在iOS开发中有一个描述算法的NSPredicate,关于这个类的使用方式,就相当的复杂。

在sql中,有些很复杂的判断逻辑,比如a > b AND a < 100之类的,但是这些并没有严格的类型限制,如果a是一个时间类型,那么< 100这个条件可能就是一个无效或者未知行为。虽然可以在运行的时候发现这个问题,但却不能在编译期就发现这样的问题。而C++就能很好的解决上面的问题,有严格的类型判定,以及一些类型转换。

在Objc中,有太多的api都非常的啰嗦,虽然说好听点能够表意,但很多时候简单的事情都会让代码非常的复杂。比如:

[string stringByAppendingString:@"string"];
[a isEqualToString:b];

而我们默认的几种方式并不会产生任何认知上的歧义:

string + "";
a == b;

在现在很多的计算并不是在CPU中执行的,而是需要放到GPU中执行,比如机器学习、渲染图片。那么如何定义GPU中的运算方式呢?著名的OpenGL就定义了自己的一套GLSL语言,iOS的CIImage也定义了一套类似的语言。但是这些都有同样的问题,那就是运行期进行编译和执行,依然不能在编译器发现问题。那么如果要放到编译期就必然需要利用语言的特性了,最简单的一个向量运算如果不能重载操作符,那么描述一个最简单的运算vec2 = vec1 * 2 + 2也将是灾难性的。

所以,在某些场合下,利用这样的特性是非常方便而且对代码的可读性也有提高。

iOS中就有部分库是利用这样的特性,比如realmwcdb

当然这里说的优势并不代表没有劣势,但是利用好这种特性也能给可读性带来更高的提升。

相关文章

  • 操作符重载和隐式转换的思考

    从刚开始工作的时候,就有很多人批判C++的操作符重载和隐式转换,我也是一直坚持显式调用的,但是最近看了一些C++相...

  • C++ 操作符重载

    重载算数操作符 重载操作符[] 重载关系操作符 重载类型转换操作符 重载输入输出操作符 引例 用一个类Fracti...

  • scala-隐式机制及Akka

    隐式机制及Akka 隐式转换 隐式转换和隐式参数时Scala中两个非常强大的功能,利用隐式转换和隐式参数,可以提供...

  • C++类型转换

    C++的类型转换分为隐式转换和显式转换 隐式转换举例: int i=4; double d=i;//隐式转换 显式...

  • js 隐式类型转换

    关系操作符(<, >, <=, >=) 相等操作符(==) 测试用例 可以看出,与前文所述隐式类型转换相符 BUG...

  • More_Effective_C++_笔记_102

    操作符 条款05 对定制的"类型转换函数"保持警惕 具有隐式类型转换的函数: 单自变量 constructors ...

  • JavaScript 深入浅出

    1.操作符背后的隐式转换关系 "1.23"-1.23----为NaNvar num="23";--最简单的转换为n...

  • 第28课:Scala隐式转换内幕实践解密

    其实隐式转换有几种类型:隐式参数,隐式转换,隐式对象,和隐式类 首先看一下Scala的作用域 隐式参数冲突的情况:...

  • scala学习 - 隐式转换和隐式参数

    本文来自《Programming in Scala》一书 scala学习之隐式转换和隐式参数 1 隐式类型转换 ...

  • C++操作符重载

    重载操作符的限制 可以重载的操作符 不能重载的算符 操作符重载的语法形式 重载赋值操作符 重载+-*/运算操作符操...

网友评论

      本文标题:操作符重载和隐式转换的思考

      本文链接:https://www.haomeiwen.com/subject/jwjsyxtx.html