2013-04-27 76 views
2

我有,我需要一個值傳遞給只有只讀目的的功能。性能:與參考值作爲函數參數

例如:

unsigned short strlen(String str) 
{ 
    short i = 0; 
    while(str[i] != '\0') 
    i++; 
    return i; 
} 

正如你所看到的,我不想改變我的工作與原來的價值,我只需要讀取它的長度。它會 - 在性能方面 - 是否更好地用String &str等參考替換參數String str,該參數正在製作原始變量的副本?

+0

我走近它像這樣 - 按值傳遞,如果你的函數需要一個副本,通過引用傳遞,如果需要的參數,而你不知道t需要一個副本,如果參數是可選的,則通過指針傳遞 – 2013-04-27 18:25:30

回答

5

它會 - 就性能而言 - 更好地將參數String str替換爲原始變量的副本,如String & str?

是的,它會。不要創建一個你在這裏似乎不需要的副本,而是引用一個參考。既然你不修改的對象,以const參考會更好:

unsigned short strlen(String const& str) 
//       ^^^^^^ 
+1

到目前爲止,'const String'是不是更常見的拼寫?我懷疑他們是一樣的,我只是想知道你爲什麼要按照這個順序寫下來。 – delnan 2013-04-27 18:13:16

+1

@delnan:我喜歡,因爲統一的這種風格(在'const'一定有,如果你要聲明一個'const'指針來後,像'INT * const'),並因爲它更容易弄清楚是怎麼回事與模板類型推演 – 2013-04-27 18:14:55

+1

@delnan是比較常見的,這意味着同樣的,它只是'串const'反映語義更好('const'適用於任何在它的左側,除非有什麼都沒有。) – 2013-04-27 18:15:08