源代码:
// 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);
}
这样会不会提高代码效率? 为什么?
第一种写法在栈内存中开了一个
char
和一个MyString *
,第二种写法也一样,就算编译器优化能认出来使用内联,但由于有强制类型转换,char
的栈内存仍然省不下。效率的提升我估计没有。这个写法的“效率提升”在于提高代码的自我说明力,减轻人类的阅读负担。毕竟程序员的阅读代码的时间是很宝贵的,在软件的维护阶段尤其如此。