zoukankan      html  css  js  c++  java
  • return的效率

    cited from:

    写在前面:

    可能跟自己有些洁癖有关,一直以来都追求极致简洁的高效代码,在高效第一的前提下,追求代码的极致简洁。今天看到前辈的一个函数,里面就是简单的一个计算式,用一个局部变量存储计算式的结果,然后返回这个局部变量。总共就三行。我第一反应就是,如果不是考虑效率的话,为啥这样写?于是搜罗了一圈关于return的效率问题的资料,发现这种方式非但没有提高效率,反而降低了效率,因为中间需要copy操作。我能想到的这样写的原因,恐怕就是“日常思维”所致,当我们想实现一个数学函数时,脑海第一反应就是y=f(x),于是先声明一个局部变量y,然后写出表达式,最后返回这个y。如此coding更符合大家的日常思维,因此不但写起来顺手,读者读起来也顺眼。但,这并不一定让计算机“顺眼顺手”。我以为,当我们在coding时,就应该尽量把自己想象成一台计算机,用计算机的“思维”方式去coding,正如我们平时穿过一个公园时,我们会不由自主地尽可能直线地抄近道穿过,这是人的思维,而计算机的思维,应该是不由自主地以最小的资源消耗、最简洁的表达方式、最快速的处理方式,去实现一个目的,而非人们看起来最符合日常习惯的方式。

    原文引用:

    如果函数返回值是一个对象,要考虑return语句的效率。例如      
        return String(s1 + s2); 
    这是临时对象的语法,表示“创建一个临时对象并返回它” 。不要以为它与“先创建一个局部对象 temp 并返回它的结果”是等价的,如 
    String temp(s1 + s2); 
    return temp; 
    实质不然,上述代码将发生三件事。首先,temp 对象被创建,同时完成初始化;然后拷贝构造函数把 temp 拷贝到保存返回值的外部存储单元中;最后,temp 在函数结束时被销毁(调用析构函数) 。然而“创建一个临时对象并返回它”的过程是不同的,编译器直接把临时对象创建并初始化在外部存储单元中,省去了拷贝和析构的化费,提高了
    效率。 
    类似地,我们不要将   
    return int(x + y); // 创建一个临时变量并返回它 
    写成 
    int temp = x + y; 
    return temp; 

    由于内部数据类型如 int,float,double 的变量不存在构造函数与析构函数, 虽然该 “临时变量的语法”不会提高多少效率,但是程序更加简洁易读。

  • 相关阅读:
    每日算法
    每日算法
    每日算法
    每日算法
    2020 蓝桥杯(省赛)校内模拟赛
    js 时间戳转特定格式的日期
    js正则表达式 replace替换url的参数
    7月/暑假集训总结1
    模板(ac):启发式合并
    [考试反思]0729NOIP模拟测试10
  • 原文地址:https://www.cnblogs.com/avin/p/9227870.html
Copyright © 2011-2022 走看看