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