Перегрузка подстрочного оператора на векторах<int> и векторах<bool> различий
Я пытаюсь реализовать операторы bitset в классе векторной оболочки
Мой вопрос заключается в том, почему подстрочный оператор [] работает, когда вектор представляет собой целое число, а не когда это логическое значение.
struct bitsetI {
vector<int> data;
bitset(int length) { data = vector<int>(length);}
int &operator[](const int index) { return data[index]; }
}
struct bitsetB {
vector<bool> data;
bitset(int length) { data = vector<bool>(length);}
bool &operator[](const int index) { return data[index]; }
}
С битсетом я
bitsetI I(4);
I[0] = 1;
действителен, но
bitsetB B(4);
B[0] = true;
не будет компилироваться, указав "начальное значение ссылки на non-const должно быть lvalue".
Я знаю, что vector является неловкой специализацией вектора (реализуя это, потому что мне нужно иметь возможность объявлять длины цепочек битов во время выполнения, а не компилировать, как с std::bitset, и скорость не проблема), но не могу понять, что проблема здесь, и если есть обходной путь или если я должен просто использовать функцию set вместо этого.