源代码:
// 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);
}
这样会不会提高代码效率? 为什么?
大家讲道理2017-04-17 11:18:42
第一種寫法在堆疊記憶體中開了一個char
和一個MyString *
,第二種寫法也一樣,就算編譯器最佳化能認出來使用內聯,但由於有強制型別轉換,char
的棧記憶體仍然省不下。
效率的提升我估計沒有。這個寫法的「效率提升」在於提升程式碼的自我說明力,減輕人類的閱讀負擔。畢竟程式設計師的閱讀程式碼的時間是很寶貴的,在軟體的維護階段尤其如此。
大家讲道理2017-04-17 11:18:42
程式碼的效率除了執行效率還應該包括維護效率。
例如第二段程式碼的+=
,有過哪怕一丁點兒程式設計經驗的人都會一眼看懂,不會在讀程式碼的時候反覆揣摩你這行程式碼到底是什麼意思,這樣節省了他的時間,也節省了你去跟他反覆講明白的時間。
在執行效率並無太大差異的時候,選擇符合人眼閱讀習慣的程式碼,這本身也是一種效率的體現。