首页 > 后端开发 > C++ > 为什么 `std::vector::reference` 不返回 `bool&`?

为什么 `std::vector::reference` 不返回 `bool&`?

Susan Sarandon
发布: 2024-12-09 00:42:10
原创
827 人浏览过

Why Doesn't `std::vector::reference` Return a `bool&`?

为什么 vector::reference 不返回对 Bool 的引用?

在 C 中,std::vector ;容器专门用于布尔值。与其他数据类型的向量相比,这种专门化引入了行为差异。

问题

在提供的示例中,函数 callIfToggled 用于切换 bool 值和调用结构体上的方法。当尝试传递对 std::vector 元素的引用时调用IfToggled,会发生编译错误。这是因为 vector::reference 返回的引用类型不是预期的 bool&。

原因

在 bool 向量特化中,vector

解决方案

  • 使用向量相反: 将 bool 向量替换为向量;解决专业化问题。
  • 使用 Boost Containers 库: Boost Containers 库提供了向量的非专业化版本。它提供了对 bool 值的真实引用。
  • 将 Bool 值包装在结构中:围绕 bool 创建一个名为 MyBool 的包装器结构。这允许传递对包装器的引用,而包装器又提供对底层布尔值的间接访问。

示例(Char 向量):

#include 

struct A
{
    void foo() {}
};

template
void callIfToggled(char v1, char &v2, T &t)
{
    if (v1 != v2)
    {
        v2 = v1;
        t.foo();
    }
}

int main()
{
    std::vector v = { false, true, false };

    const char f = false;
    A a;

    callIfToggled(f, v[0], a);
    callIfToggled(f, v[1], a);
    callIfToggled(f, v[2], a);
}

以上是为什么 `std::vector::reference` 不返回 `bool&`?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板