首頁  >  文章  >  後端開發  >  為什麼在 C 中使用基於範圍的 For 迴圈和 std::vector 會導致錯誤?

為什麼在 C 中使用基於範圍的 For 迴圈和 std::vector 會導致錯誤?

Linda Hamilton
Linda Hamilton原創
2024-10-27 07:45:31463瀏覽

Why Does Using a Range-Based For Loop With std::vector<bool>導致 C 錯誤? 
在 C 中導致錯誤? " />

Range-for-Loops 和std::vector

在C 中,基於範圍的for 循環提供了一種迭代容器中元素的便捷方法。但是,當與布林值容器一起使用時,某些行為可能看起來令人驚訝。成功迭代了intVector 並且但是,第二個循環會導致以下錯誤:

原因

發生此錯誤是因為std::vector 與其他標準容器不同。它將布林值打包為整數(每個布林值32 位元),而不是將其元素保存在單獨的記憶體位置中。布林值的存取。值引用,或在這種情況下維護臨時代理:
<code class="cpp">std::vector<int> intVector(10);
for (auto& i : intVector)
    std::cout << i;

std::vector<bool> boolVector(10);
for (auto& i : boolVector)
    std::cout << i;</code>

透過使用auto&&,如果給定true 布林值引用,編譯器將正確折疊為左值引用,或者如果給定代理引用,則綁定並保持臨時代理處於活動狀態。

以上是為什麼在 C 中使用基於範圍的 For 迴圈和 std::vector 會導致錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn