首頁 > 後端開發 > C++ > 主體

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

Linda Hamilton
發布: 2024-10-27 07:45:31
原創
462 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!