Здравствуйте, _hum_, Вы писали:
__>это по правилу хорошего тона? ну, так его не всегда соблюдают. а в общем случае ведь никто не запретит просто забрать данные у x-value способом, делающим объект невалидным для последующих операций.
Бредовый пример. Мне кажется, что это всё равно, как если бы написать в своём контейнере что-то вроде
struct MyArray {
...
char* begin() const {
return (char*)(rand() % 2 ? 0 : "begin");
}
char* end() const {
return (char*)"end";
}
};
а потом жаловаться, что range-based-for с таким классом не работает (да ещё и глючит каждый раз по разному), а поэтому range-based-for плохой и использовать его не надо.
А то ведь в стандарте тоже соглашения об смысле методов begin и end — не более чем "правила хорошего тона".
__>ну так для того, чтобы убедиться, что у вектора есть нулевое состояние и оно ничем не грозит, мне нужно лезть куда-то в доки и стандарты, в то время как swap делает это логически прозрачным.
А swap для двух объектов произвольного типа что делает? Неужели обменивает их состояние? Откуда у тебя такая уверенность в этом? Сомневаюсь, что разумный человек может быть в этом уверен без "залезания в доки" или без просмотра исходников. Ведь обменивающее поведение swap — не более чем правило хорошего тона!