recherche

Maison  >  Questions et réponses  >  le corps du texte

C++ 两种代码写法的效率比较

源代码:

// Blahblah~
{
    ////////////////////////////////
    // 写法一 BEGIN
    //char realc = (char) c;
    //outString->append( &realc, 1 );
    // 写法一 END
    ////////////////////////////////

    ////////////////////////////////
    // 为什么写法二是"more efficient function call?"
    *outString += (char) c;    // somewhat more efficient function call.
    ////////////////////////////////
    ++i;
}
// Blahblah~

而重载的+=运算符的操作是这样的

这个函数写在类定义里~应该会转化成内联(?)

// += operator. Maps to append
MyString& operator += (char single)
{
    return append(&single, 1);
}

这样会不会提高代码效率? 为什么?

迷茫迷茫2807 Il y a quelques jours549

répondre à tous(4)je répondrai

  • 大家讲道理

    大家讲道理2017-04-17 11:18:42

    第一种写法在栈内存中开了一个char和一个MyString *,第二种写法也一样,就算编译器优化能认出来使用内联,但由于有强制类型转换,char的栈内存仍然省不下。

    效率的提升我估计没有。这个写法的“效率提升”在于提高代码的自我说明力,减轻人类的阅读负担。毕竟程序员的阅读代码的时间是很宝贵的,在软件的维护阶段尤其如此。

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-17 11:18:42

    代码的效率除了执行效率还应该包括维护效率。

    比如第二段代码的+=,有过哪怕一丁点儿编程经验的人都会一眼看懂,不会在读代码的时候反复揣摩你这行代码到底是什么意思,这样节省了他的时间,也节省了你去跟他反复讲明白的时间。

    在执行效率并无太大区别的时候,选择符合人眼阅读习惯的代码,这本身也是一种效率的体现。

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-17 11:18:42

    没觉得第二种有什么维护上的效率提升,对于string类型,不知道是append表述清晰些还是写个+=表述清晰些,我觉得是append。

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-17 11:18:42

    实际上要比较的是appendoperator +=这两个函数的效率。你可以分别重复1w次到10w次,测个时间。

    répondre
    0
  • Annulerrépondre