2011-02-15 16 views
2

可能重複被const_cast會使用:
Correct usage(s) of const_cast<>當在C++

什麼是使用具有在該函數的參數一const參數,然後在函數內使用的const_cast

+2

重複:http://stackoverflow.com/questions/2673508/correct-usages-of-const-cast – tenfour 2011-02-15 10:43:38

回答

7

我只使用const_cast的情況下,我必須傳遞一個常量參數不可修改的遺留代碼已知不修改參數,即它實際上是const,但API /函數調用的簽名不包含const關鍵字。

1

只有當您需要將該參數傳遞給傳統的C API時,您纔會使用它,該C API承諾不會修改數據。

在任何其他情況下,你應該需要謬以千里常量性與const_cast,並意識到,即使劈砍而去後常量性是仍然未定義行爲修改的對象;它不再是你的編譯器強制執行的,你承擔了這個承諾的責任。

+0

刪除常量後的修改只有UB,如果原始對象實際上是常量,但它仍然是你確保這一責任。當然,在這種情況下,您應該更喜歡傳遞非常量,所以這仍然只適用於傳統的API。 – 2011-02-15 22:35:31

+0

@Fred:我認爲這就是我說的...? – 2011-02-16 14:24:47