Re[6]: v.emplace_back(v[0])
От: rg45 СССР  
Дата: 09.10.17 08:57
Оценка: +2
Здравствуйте, uzhas, Вы писали:

U>Так вот для метода emplace_back (и многих других) не описано никаких ограничений. В том числе не написано "вот это не передавайте, иначе UB". Я это понимаю, как при "ненарушении" других правил языка (то есть где-то ранее не допущен UB) и при передаче некоторого валидного значения в emplace_back реализация STL соблюдет контракт и выполнит post-condtion и всю задекларированную логику.

U>Короче, если не нарушил pre-conditions, то все должно работать, даже если вставляемый элемент указывает внутрь контейнера (т.к. оговорок по этому поводу в стандарте нет).

Да согласен. Но, с практической точки зрения, это означает, что разработчики стандартной бибилиотеки должны иметь в виду, что любой из фактических параметров, переданных в emplace_back, может ссылаться (прямо или косвенно) на какой-нибудь из существующих элементов контейнера и всегда поддрерживать время жизни всех элементов до окончания операции. Не будет ли это ударом по оптимизации?
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.