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
的通用引用的代理类。