我試圖實現memchr()函數。我的代碼必須返回一個void *,所以如果我們找到該角色,我們可以改變它。問題在這裏。我有兩種方法,一種方法是c_style。static cast或c style cast
void *memChr(const void *s1, int c, size_type n)
{
const char *p = (const char *)s1;
while (n--)
if (*p++== (char)c)
return (void *)--p;
return 0;
}
這些方法使用C樣式轉換,這裏我們發送S1爲const,這是正確的事業,我們不希望任何變化,然後我們回到P作爲非const的指針爲void這又是正確的。任何方式這是舊的,我想要更多的C++方法。像這樣:
void *memChr(void *s1, int c, int n)
{
char *p = static_cast< char *>(s1);
while (n--)
if (*p++ == static_cast<char>(c))
return static_cast<void *>(p);
return 0;
}
我這些代碼的問題是:我不能投一個const指向一個非常量指針.static_cast是比C樣式轉換更安全,但它讓我使用非const的參數,它是不適當 。使用標準的memchr()參數,無法用static_cast實現。 那麼哪種方法更好?我剛剛完成了C++教程,我正在嘗試學習好的編碼,但我有點困惑。
加上'const_cast' –
如果什麼's1'原本指向常量數據?也就是說,不管你使用哪種風格,只要你想返回一個非const指針,你應該將's1'聲明爲非const指針。然後,你不需要'const_cast'。爲了清楚起見,我會推薦C++風格的演員。 – cqdjyy01234
從輸入中刪除'const'限定符是不好的做法。如果你想在返回的指針處修改數據,那麼把非const作爲輸入。或者更好地返回const指針並強制調用者明確移除'const'。 –