假設我們有以下功能:是否可以將一個向量<shared_ptr <T>>傳遞給const向量<shared_ptr <const T>>&參數?
void doStuff(const std::vector<std::shared_ptr<const Foo>>& fs) { }
有沒有一種辦法(安全)傳遞一個std::vector<std::shared_ptr<Foo>>
這個參數?例如:
std::vector<std::shared_ptr<Foo>> foos;
doStuff(foos);
這種隱式轉換失敗,但可以通過強制轉換安全地完成嗎? (這看起來理論上是安全的,因爲doStuff
函數將無法修改矢量,也不能修改其中的對象。)
我發現使const items的shared_ptr增加了不必要的複雜性。但我不認爲你可以做到這一點沒有黑客。 –
這是明確未定義的行爲。內存佈局明智可能*看起來像*它應該每次都有效,但是你不能依賴它。誰知道編譯器可能做什麼轉換,包括消除呈現未定義行爲的任何代碼。 –
什麼是未定義的行爲?我的問題中的代碼沒有編譯,所以也許你是指一些假設的'const_cast'? – jtbandes