2013-01-05 32 views
2

目前我正在使用C++中的一個應用程序,我希望它是常量正確的。儘可能在參數上使用const的含義,以及類似的東西。但是,這個C++應用程序使用了一個不經常使用const的C庫。我遇到的問題是,當向C庫中的函數發送參數時,參數不能是const,因此我不得不進行強制轉換。

使用const轉換類型有損於整個const正確性,我一直在努力。當使用不是常量正確的C庫時,你是否只需要使用流,並且不使用const正確性來輕鬆使用這些庫?還是有沒有更好的方法,我沒有看到?請注意,這是一個相當小的程序,因此隔離使用該庫的部分並使該部分不是常量不正確不是真正的選擇。使用C庫時C++中的const正確性

+3

如果你確定它不會修改參數,你可以使用'const_cast',但你總是可以做一個副本。 – chris

+0

更適合程序員IMO作爲SO不適用於編碼風格,而是編碼問題。 –

+0

@chris我不能做一個安全的副本。 – Josh

回答

4

個人而言,我更喜歡在庫的邊界使用不是常量正確的強制轉換。這種方法的優點是你可以讓你的代碼獲得正確使用const的好處。缺點是如果庫修改了一個對象,即使是「臨時」,你已經丟失了const,你的程序可能會出錯。

例如,我已經看到C庫取char *參數,它們沒有進行邏輯修改。但是,他們的解析器可能會暫時用零替換字符串中的分隔符以使用strcpy來提取它們。如果拋棄const來允許C++函數採用const char *,並且某人將指針傳遞給實際上爲const的對象,那麼用零「臨時」替換分隔符將導致錯誤。

+0

+1我也經歷過與第三方庫類似的「功能」,特別是在更「可靠」的商業加密庫之一中。 – WhozCraig