2016-09-13 70 views
0

我想知道有多少人會計算在編譯尋址的轉換。將c中的cast成本尋址指針從unsigned char *轉換爲const char *?

e。 G。

strlen API

定義:

size_t strlen (const char * str); 

他們得到的常用3只const char *

,但有時我使用像

unsigned char arr[] = "something" 
strlen((const char *)arr); 

只是專注於unsigned char *const char *

我不知道什麼樣的代價會有代碼?

+4

沒有運行時成本和不重要的編譯時間成本。轉移到更重要的事情。這不是一個真正的性能考慮,而是一個功能性考慮因素 - 只有在絕對必要時才施放,而不是在不施加壓力時施放。 – kaylum

+0

要添加到@kaylum的評論:只有當你明白**全部** **的影響**並完全接受他們時才施放!您想了解有關數組的隱式轉換。 – Olaf

+0

這應該是答案。 –

回答

1

以這種方式沒有與劇組關聯的運行時間開銷。它只是告訴編譯器訪問(或解釋)與變量聲明不同的變量。

在您的具體情況下,編譯器足夠聰明,可以生成代碼,將char數組看作char*指針,而無需額外開銷。

一般來說,C中的強制轉換決不會產生任何運行時開銷。