我知道,使用const_cast
不會引入未定義的行爲(即它的使用安全),只要您最初的const_cast
ing的變量不是被定義爲const
,或者它最初被定義爲const
,不要修改它的const_cast
ed別名。但是,大多數STL容器(例如,std::vector
,std::set
)也動態地分配它們的內部緩衝區也是公知的。基於這個事實,我認爲將const
定義的std::vector
放在只讀存儲器中是不可能的。const_cast const STL容器,它是未定義的行爲嗎?
當然,如果上述持有我來給這類STL容器,即使他們定義爲const
的假設,例如,:
std::vector<int> const v;
const_cast
通過他們const_cast
版荷蘭國際集團他們改變他們別名是合法的,不會導致任何未定義的行爲。
以上假設成立或我錯了嗎?
如果標準說它是UB,那就是UB。優化器使用這個來做各種瘋狂的東西,假設'const'對象不會被修改。 – juanchopanza
注意,在常量向量的情況下,編譯器不需要動態分配內存(_avoiding allocation_ standard子句),事實上,可以將常量向量完全放置在靜態只讀存儲器中。 –
@ 101010我認爲你選擇我的答案作爲「解決方案」有點太快。它還沒有(正如我正在寫這篇文章)對你的問題的真實答案。到目前爲止,我只是解決了動態分配的內存必須是可變的假設。 –