Перегрузка подстрочного оператора на векторах<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 вместо этого.

0 ответов

Другие вопросы по тегам