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

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

作者: 码农苍耳 | 来源:发表于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

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

    相关文章

      网友评论

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

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