目前我正在使用C++中的一個應用程序,我希望它是常量正確的。儘可能在參數上使用const的含義,以及類似的東西。但是,這個C++應用程序使用了一個不經常使用const的C庫。我遇到的問題是,當向C庫中的函數發送參數時,參數不能是const,因此我不得不進行強制轉換。
使用const轉換類型有損於整個const正確性,我一直在努力。當使用不是常量正確的C庫時,你是否只需要使用流,並且不使用const正確性來輕鬆使用這些庫?還是有沒有更好的方法,我沒有看到?請注意,這是一個相當小的程序,因此隔離使用該庫的部分並使該部分不是常量不正確不是真正的選擇。使用C庫時C++中的const正確性
2
A
回答
4
個人而言,我更喜歡在庫的邊界使用不是常量正確的強制轉換。這種方法的優點是你可以讓你的代碼獲得正確使用const的好處。缺點是如果庫修改了一個對象,即使是「臨時」,你已經丟失了const,你的程序可能會出錯。
例如,我已經看到C庫取char *
參數,它們沒有進行邏輯修改。但是,他們的解析器可能會暫時用零替換字符串中的分隔符以使用strcpy
來提取它們。如果拋棄const來允許C++函數採用const char *
,並且某人將指針傳遞給實際上爲const的對象,那麼用零「臨時」替換分隔符將導致錯誤。
+0
+1我也經歷過與第三方庫類似的「功能」,特別是在更「可靠」的商業加密庫之一中。 – WhozCraig
相關問題
- 1. C++的QList const正確性
- 2. Const正確性問題C++
- 3. 正確使用const C++
- 4. C++中NULL指針和const正確性
- 5. C++ const getters的正確性問題
- 6. C++ const正確性與std :: pair
- 7. C++常量,正確性和const成員
- 8. const正確性和返回值 - C++
- 9. C++智能指針const正確性
- 10. 爲什麼C標準庫忽略const正確性?
- 11. const正確性
- 12. Const正確性 - 如何訪問C++中的向量元素?
- 13. 在C++中使用const的正確方法是什麼?
- 14. PIMPL const正確性
- 15. 如何在C#中實現const正確性?
- 16. const正確性與臨時的實例
- 17. 外部const指針的const正確性
- 18. C++複製構造函數的const正確性被忽略?
- 19. C++中使用const和與&
- 20. C#:正確使用WeakReference IsAlive屬性
- 21. 如何POCO C++庫使用OpenSSL正確
- 22. 添加const正確性
- 23. memcpy和const正確性
- 24. Cython 1.1.2和const正確性
- 25. 觀察者const正確性
- 26. file read()const正確性
- 27. const char *不能被C++正確解釋爲Excel庫
- 28. Visual C++關係運算符重載const正確性(使用std :: sort)
- 29. 如何在C++中實現多維地圖中的const正確性
- 30. 使用poll()時正確處理Ctrl-C
如果你確定它不會修改參數,你可以使用'const_cast',但你總是可以做一個副本。 – chris
更適合程序員IMO作爲SO不適用於編碼風格,而是編碼問題。 –
@chris我不能做一個安全的副本。 – Josh