Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 返回bool&;从矢量_C++_Stl_Vector - Fatal编程技术网

C++ 返回bool&;从矢量

C++ 返回bool&;从矢量,c++,stl,vector,C++,Stl,Vector,在以下代码中: class SomeClass { vector<int> i; vector<bool> b; public: int& geti() {return i[0];} bool& getb() {return b[0];} }; class-SomeClass{ 向量i; 载体b; 公众: int&geti(){返回i[0];} bool&getb(){返回b[0];} }; 如果注释掉getb(),则

在以下代码中:

class SomeClass {
    vector<int> i;
    vector<bool> b;

public:
    int& geti() {return i[0];}
    bool& getb() {return b[0];}
};
class-SomeClass{
向量i;
载体b;
公众:
int&geti(){返回i[0];}
bool&getb(){返回b[0];}
};
如果注释掉
getb()
,则代码编译良好。显然,返回对存储在向量中的
int
的引用是没有问题的,但是不能使用
bool

这是为什么?

std::vector
是“特殊的”。它将其元素存储为位数组,这意味着元素不可单独寻址,并且您无法获得对元素的引用

std::vector
迭代器、其
运算符[]
及其其他成员函数返回代理对象,这些代理对象提供对元素的访问,而不需要存储实际的
bool
对象

如果您需要访问单个元素,请考虑使用<代码> STD::vector < /C>或定义<代码>布尔O/C> >类似于由代码< char < />代码>的枚举(或<<代码>签名char < />代码>或<代码>未签名char < /> >,如果您关心Signistic).

向量是bool类型的特殊类模板专门化

提供这种专门化是为了优化空间分配:八个bool元素组合成一个字节,每个bool元素只占用一位

不允许引用某一字节中的一位

因此,函数无法返回对向量中abool类型的引用

也有人认为向量不是容器


您可以改用德克。

+1漂亮的接球。。。我甚至没有想到。我花了一分钟的时间,想了想当地人的事……真让人恼火。谢谢你的回答。Irc<代码>:STD::矢量< /代码>被禁止,不应该使用。@代码:>代码:ST::矢量< /代码>不被禁止。好了,Google之后,它似乎被提出了,但是C++标准委员会把它击落了。考虑到现有的回复,你仍然可以“挽救”。通过使用
std::vector::reference
作为函数的返回类型,而不是显式的
bool&
来创建代码
std::vector::reference
将是充当压缩
std::vector
的通用引用的代理类。