Вопрос о самоназначении. Например, копирование вектора в себя:
std::vector<std::string> vec(5, "hello");
vec = vec;
Должен ли приведенный выше код выполнять 5 операций присваивания строк самим себе или просто ничего не делать? Я имею в виду, действительна ли следующая проверка:
std::vector operator=(const std::vector &rhs)
{
if (this == &rhs)
{ return *this; }
...
}
Я работаю над собственной реализацией класса std::variant
(просто для удовольствия) и мне интересно, стоит ли мне добавлять проверку самоназначения в начало оператора присваивания или мне просто нужно скопировать содержащийся элемент в себя?
Я понимаю, что в целом это не имеет значения. Вы не должны создавать класс, который использует факт копирования в себя. Но мне интересно, если стандарт говорит что-нибудь об этом.