Подтвердить что ты не робот

Что происходит, когда вы вызываете данные() на std::vector <bool>?

В С++ 11 реализована функция-член data() на std::vector, которая дает вам указатель на массив памяти. Означает ли это, что у специалиста шаблона std::vector<bool> есть этот член? Поскольку эта специализация не хранит данные в терминах bool *, какое поведение вы можете ожидать от вызова data()?

4b9b3361

Ответ 1

Эта страница, описывающая класс, явно указывает, что специализация не предоставляет этот метод.

Специализация имеет те же функции-члены, что и неспециализированный вектор, за исключением данных, emplace и emplace_back, которые отсутствуют в этой специализации.

Эта другая страница, а также §23.3.7 спецификаций С++ подтверждают это.

Ответ 2

Он не будет компилироваться, если ваша реализация не имеет нестандартного расширения. Специализация std::vector<bool>, как указано в С++ 11 23.3.7/1, не объявляет член data.

Ответ 3

Нет. Per std::vector<bool>

Не обязательно хранить свои данные в одном непрерывном фрагменте память.

Нет члена data().

Ответ 4

Ну, нет std::vector<bool>::data, так что вы можете ожидать, это ошибка компиляции.